Imagecollide mit Type und AnimImage

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

bubba

Betreff: Imagecollide mit Type und AnimImage

BeitragDi, Dez 01, 2009 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebes Forum!

Nach einigem Rumrätseln und Suchen habe ich keine Antwort gefunden, warum das folgende Beispiel nicht funktioniert. Bei der Kollisionabfrage wird immer nur die zuletzt erstellte Explosion betrachtet. Sehr seltsam, dass das DrawImage für die verschiedenen Objekte funktioniert und das ImagesCollide nicht.

Vielen Dank für eure Ratschläge! Very Happy

Code: [AUSKLAPPEN]

Graphics 640,480
Local URL:String="http::www.2dgamecreators.com/tutorials/gameprogramming/basic/"
Local Player:TImage=LoadImage(LoadBank(URL+"blobship_1-1.png"))
'Local AlienBild:TImage=LoadAnimImage(LoadBank(URL+"exp1.png"),64,64,0,16)
Local Frame:Int=0
Local AnimDelay:Int=10

Type TAlien
   Field bild:TImage
   Field x:Int
   Field y:Int
   
   Method Create:TAlien(_bild:String,_x,_y)
      bild = LoadAnimImage(LoadBank("http::www.2dgamecreators.com/tutorials/gameprogramming/basic/"+_bild),64,64,0,16)


      x = _x
      y = _y
      Return Self
   End Method
   
   Method draw(_frame:Int,_Player:TImage)
      DrawImage(bild,x,y,_frame)
      
      If ImagesCollide(bild,x,y,_frame,_Player,MouseX(),MouseY(),0) Then
         SetClsColor 255,0,0
         Else
            SetClsColor 0,0,0
            EndIf
      
   End Method
   
End Type

Local alienList:TList = New(TList)

Local alien:TAlien = New(TAlien).Create("exp1.png",150,200)
alienlist.AddLast(alien)
alien = New(TAlien).Create("exp1.png",250,200)
alienlist.AddLast(alien)
alien = New(TAlien).Create("exp1.png",350,200)
alienlist.AddLast(alien)

While Not KeyHit(key_escape) Or AppTerminate()
     Cls
    
     DrawImage Player,MouseX(),MouseY()

     For Local a:TAlien = EachIn alienList
        a.draw(Frame,Player)
     Next
   
     Flip
     If AnimDelay<0 Then
        Frame :+ 1
        If Frame>15 Then Frame=0
        AnimDelay=10
     EndIf
     AnimDelay :- 1
   

Wend
End

Suco-X

Betreff: .....

BeitragDi, Dez 01, 2009 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist das mit dem SetCLSColor. Du Fragst eine Kollision z.b. beim ersten Objekt ab und setzt die Farbe auf rot. Danach prüft das Programm die nächste Kollision mit dem zweiten Objekt und setzt die Farbe wieder auf normal. So kann der Effekt den du zur Darstellung der Kollision gewählt hast nur beim letzten Objekt funktionieren.

Probiers lieber so:

Code: [AUSKLAPPEN]


Graphics 640,480
Local URL:String="http::www.2dgamecreators.com/tutorials/gameprogramming/basic/"
Local Player:TImage=LoadImage(LoadBank(URL+"blobship_1-1.png"))
'Local AlienBild:TImage=LoadAnimImage(LoadBank(URL+"exp1.png"),64,64,0,16)
Local Frame:Int=0
Local AnimDelay:Int=10

Type TAlien
   Field bild:TImage
   Field x:Int
   Field y:Int
   Field r:Int, g:Int, b:Int

   Method New()
      r = 255
      g = 255
      b = 255
   End Method
   
   Method Create:TAlien(_bild:String,_x,_y)
      bild = LoadAnimImage(LoadBank("http::www.2dgamecreators.com/tutorials/gameprogramming/basic/"+_bild),64,64,0,16)
      x = _x
      y = _y
      Return Self
   End Method
   
   Method draw(_frame:Int,_Player:TImage)
     
     
      If ImagesCollide(bild,x,y,_frame,_Player,MouseX(),MouseY(),0) Then
         r = 255
      g = 0
      b = 0
         Else
         r = 255
         g = 255
         b = 255
      EndIf

   SetColor r,g,b
 DrawImage(bild,x,y,_frame)
      SetColor 255,255,255
   End Method
   
End Type

Local alienList:TList = New(TList)

Local alien:TAlien = New(TAlien).Create("exp1.png",150,200)
alienlist.AddLast(alien)
alien = New(TAlien).Create("exp1.png",250,200)
alienlist.AddLast(alien)
alien = New(TAlien).Create("exp1.png",350,200)
alienlist.AddLast(alien)

While Not KeyHit(key_escape) Or AppTerminate()
     Cls
   
     DrawImage Player,MouseX(),MouseY()

     For Local a:TAlien = EachIn alienList
        a.draw(Frame,Player)
     Next
   
     Flip
     If AnimDelay<0 Then
        Frame :+ 1
        If Frame>15 Then Frame=0
        AnimDelay=10
     EndIf
     AnimDelay :- 1
   

Wend
End
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

bubba

Betreff: Danke!

BeitragDi, Dez 01, 2009 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, da wäre ich ja nie drauf gekommen Wink ich dachte die ganze Zeit, es hätte was mit den objekten zu dun Wink


Vielen Dank!

Suco-X

Betreff: ......

BeitragDi, Dez 01, 2009 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst wohl lernen müssen diese Sachen in Gedanken nachzuvollziehen. Aber solange du deine Probleme immer so ausführbar postest, wird dir sicher immer jemand helfen.

Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group