Hallo und danke mk-soft,
das ich positionen berechnen muss ist soweit klar, aber wie mache ich das gedanklich bei mehreren hundert kleinen Bildern ohne das die sich überlappen, bei ein paar Bilder wäre das kein Problem, aber man kann doch nicht jedes Bild mit jedem vergleichen, da die Anzahl und die Größe der Bilder nicht fest steht.
Nur zum besseren Verständnis, ich möchte nicht, das mir jemand den Code schreibt, ich brauche nur ein paar Gedankengänge, auf die ich vielleicht nicht komme.
mfg
Neuankömmling in Purebasic
-
- Beiträge: 55
- Registriert: 01.03.2015 12:05
- Wohnort: Saarland / Püttlingen
- Kontaktdaten:
- alter Mann
- Beiträge: 201
- Registriert: 29.08.2008 09:13
- Wohnort: hinterm Mond
Re: Neuankömmling in Purebasic
Die Kollisionsberechnung ist doch gar nicht so schwer: Dein Bild hat eine Hintergrundfarbe. Wenn Du Dein "Steinchen" (per Zufall) positioniert hast, kontrollierst Du einfach (für jedes Pixel), ob an der Pixelposition eine Farbe ist, die nicht der Hintergrundfarbe entspricht. Dann hast Du eine Kollision.
Win11 64Bit / PB 6.0
Re: Neuankömmling in Purebasic
Habe das mal umgesetzt. Geht nur mit einer Farbe im Hintergrund
für die relative schnelle Umsetzung verwende ich die Funktion "CustomFilterCallback"
Vor dem zeichnen des Bildes den Bereich vorher prüfen
P.S. Hab eine Include mit weiteren Funktionen erstellt.
http://www.purebasic.fr/german/viewtopi ... =8&t=28782
für die relative schnelle Umsetzung verwende ich die Funktion "CustomFilterCallback"
Vor dem zeichnen des Bildes den Bereich vorher prüfen
Code: Alles auswählen
; Fenster
Enumeration
#Main
EndEnumeration
; Gadgets
Enumeration
#Canvas
EndEnumeration
Global exit
; Pictures
Enumeration
#pic0
#pic1
EndEnumeration
Procedure LoadPictures()
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
LoadImage(#pic0, #PB_Compiler_Home + "examples\sources\Data\Background.bmp")
LoadImage(#pic1, #PB_Compiler_Home + "examples\sources\Data\PurebasicLogo.bmp")
CompilerElse
LoadImage(#pic0, #PB_Compiler_Home + "examples/sources/Data/Background.bmp")
LoadImage(#pic1, #PB_Compiler_Home + "examples/sources/Data/PurebasicLogo.bmp")
CompilerEndIf
EndProcedure
; ***************************************************************************************
Global IsCollision, CollisionBackColor
Procedure CollisionCallback(x, y, SourceColor, TargetColor)
Protected Color
Color = TargetColor & $FFFFFF
If Color <> CollisionBackColor
IsCollision = #True
EndIf
ProcedureReturn TargetColor
EndProcedure
Procedure CollisionBox(x, y, dx, dy, backcolor)
IsCollision = #False
CollisionBackColor = BackColor
DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@CollisionCallback())
Box(x, y, dx, dy, 0)
DrawingMode(#PB_2DDrawing_Default)
ProcedureReturn IsCollision
EndProcedure
; ***************************************************************************************
Procedure Draw()
Protected x, y, dx, dy
dx = GadgetWidth(#Canvas)
dy = GadgetHeight(#Canvas)
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, dx, dy, RGB(192,192,192))
DrawImage(ImageID(#pic0), 10, 10)
If CollisionBox(30, 40, ImageWidth(#pic1), ImageHeight(#pic1), RGB(192,192,192))
Debug "1. Kollision"
Else
Debug "1. Keine Kollision"
EndIf
DrawImage(ImageID(#pic1), 30, 40)
If CollisionBox(300, 200, ImageWidth(#pic1), ImageHeight(#pic1), RGB(192,192,192))
Debug "2. Kollision"
Else
Debug "2. Keine Kollision"
EndIf
DrawImage(ImageID(#pic1), 300, 200)
StopDrawing()
EndIf
EndProcedure
Procedure Main()
Protected Event
If OpenWindow(#Main, #PB_Any, #PB_Any, 800, 600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#Canvas, 5, 5, WindowWidth(#Main) - 10, WindowHeight(#Main) - 10)
LoadPictures()
Draw()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Repaint
;Draw()
Case #PB_Event_CloseWindow
exit = #True
EndSelect
Until exit
EndIf
EndProcedure : Main()
P.S. Hab eine Include mit weiteren Funktionen erstellt.
http://www.purebasic.fr/german/viewtopi ... =8&t=28782
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 55
- Registriert: 01.03.2015 12:05
- Wohnort: Saarland / Püttlingen
- Kontaktdaten:
Re: Neuankömmling in Purebasic
Vielen Dank,
ich werde mich mal die Tage dran setzen und sehen, wie ich das umsetze.
mfg
ich werde mich mal die Tage dran setzen und sehen, wie ich das umsetze.
mfg