BlitzBasic-Community-Tutorial/ Kollisionen

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Kollisionen sind von Nöten, wenn z.B. ein Raumschiff gegen einen Asteroiden prallen und dann explodieren soll.

Hier der Code:

If ImagesCollide(bild1, x, y, rahmen, bild2, x, y, rahmen) Then /aktion\ 

oder

If ImagesOverlap(bild1, x, y, rahmen, bild2, x, y, rhamen) Then /aktion\

Man beachte hierbei, dass für rahmen eine 1 für ja steht und eine 0 für nein. Und der Unterschied zwischen Collide und Overlap ist folgender: Collide ist pixelgenaue Kollision und Overlap ist einfache Kollision.

Also hier ein Beispiel:

Graphics 800, 600
SetBuffer BackBuffer()

variable = LoadImage("Bildpfad")
variable2 = LoadImage("Bildpfad")

Repeat
 Cls   

 DrawImage variable, MouseX(), MouseY()
 DrawImage variable2, x, y

 If ImagesCollide(variable, MouseX(), MouseY(), 0, variable2, x, y, 0) Then
 Print "Kollision!!!"
 Endif
 Flip
Until KeyHit(1)

End

Hier ein kleines Beipiel mit .bmp-Bildern (geht auch mit Demo): Collidedemo.zip

So, das war's schon fast. Aber was ist, wenn wir jetzt ein Rechteck mit einem Bild kollidieren lassen wollen?

Ganz einfach:

If ImageRectCollide(bild, x, y, 0, rechteck, x, y, breite, höhe) Then /aktion\

oder

If ImageRectOverlap(bild, x, y, 0, rechteck, x, y, breite, höhe) Then /aktion\

Hierzu noch ein Beispiel:

Graphics 800, 600
SetBuffer BackBuffer()

variable = LoadImage("Bildpfad")

Repeat
 Cls

 DrawImage variable, MouseX(), MouseY()
 DrawImage variable2, x, y

 If ImageRectCollide(variable, MouseX(), MouseY(), 0, rechteck, x, y, breite, höhe) Then 
  Print "Kollision!!!"

  Flip
  Until KeyHit(1)

  End