Seite 2 von 2
					
				Re: Neuankömmling in Purebasic
				Verfasst: 03.03.2015 07:43
				von Baba_Smurf
				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
			 
			
					
				Re: Neuankömmling in Purebasic
				Verfasst: 03.03.2015 07:49
				von Nino
				
			 
			
					
				Re: Neuankömmling in Purebasic
				Verfasst: 03.03.2015 09:58
				von alter Mann
				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.
			 
			
					
				Re: Neuankömmling in Purebasic
				Verfasst: 03.03.2015 13:20
				von mk-soft
				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
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 
			 
			
					
				Re: Neuankömmling in Purebasic
				Verfasst: 03.03.2015 17:37
				von Baba_Smurf
				Vielen Dank,
ich werde mich mal die Tage dran setzen und sehen, wie ich das umsetze.
mfg