BlitzBasic-Community-Tutorial/ Kollisionen
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