2D Kollision genauer machen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Björn

Betreff: 2D Kollision genauer machen

BeitragMi, März 16, 2005 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Very Happy
in meinem 2D-Spiel habe ich eine Kollisionsprüfung mit
Code: [AUSKLAPPEN]
ImagesCollide(schuss,s\x,s\y,0,player,x,y,0)

Diese ist aber sehr ungenau soll heißen mann kann ruhig fünt pixel zu tief schießen und der Treffer zählt trotzdem.
Die Grafik ist ca. 30x60 Pixel groß.
Gibt es eine Möglichkeit die Kollisionsabfrage zu verbessern?
Björn
www.brickmovies.de

Spikespine

BeitragMi, März 16, 2005 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Imagescollide ist normlaerweise ganz genau, wenn transparente bereiche im Bild sind...
genauer gehts eigentlich nicht, wenn du die Kollision zweier Bilder prüfst...
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

Kifferopa

Gast

BeitragMi, März 16, 2005 18:31
Antworten mit Zitat
Die heilige Online-Hilfe hat Folgendes geschrieben:
Wert=IMAGERECTCOLLIDE (Bild, X, Y, Frame, StartX, StartY, Breite, Höhe)


Beschreibung
Diese Funktion überprüft, ob ein Bild einen rechteckigen Bereich berührt oder überlappt. Dies ist besonders für Objekte mit transparenter Farbe gut geeignet. Die Prüfung geschieht pixelgenau - daher etwas langsamer als IMAGERECTOVERLAP. Um die Kollision zwischen zwei Bilder zu prüfen, ist der Befehl IMAGESCOLLIDE besser. Benutze MASKIMAGE, um eine transparente Farbe auszuwählen!

Diese Grafik zeigt eine saubere, pixelgenaue Kollision, die mit dieser Funktion ermittelt werden kann.



Parameter
Bild = Identität des Bildes (z.B. mit LOADIMAGE ermittelt)
X = Hor. Position des Bildes
Y = Ver. Position des Bildes
Frame = Animationsframe des Bildes (ab 0)
StartX = Hor. Startkoordinate des rechteckigen Bereichs
StartY = Ver. Startkoordinate des rechteckigen Bereichs
Breite = Breite des rechteckigen Bereichs
Höhe = Höhe des rechteckigen Bereichs




Rückgabewert
0 = keine Kollision
1 = Kollision



Beispiel
Dieses Programm zeichnet einen Kreis. Wenn dieser Kreis einen rechteckigen Bereich berührt, dann wird das Programm gestoppt:

GRAPHICS 640,480,0,1
gfxCircle=CREATEIMAGE(50,50)
SETBUFFER IMAGEBUFFER(gfxCircle)
COLOR 255,0,0
OVAL 10,10,30,30,1
SETBUFFER BACKBUFFER()
Color 0,0,255
hotX=RND(50,610)
hotY=RND(50,430)
hotW=RND(20,100)
hotH=RND(20,100)
REPEAT
circleX=MOUSEX()
circleY=MOUSEY()
CLS
RECT hotX,hotY,hotW,hotH,0
DRAWIMAGE gfxCircle,circleX,circleY
FLIP
UNTIL IMAGERECTCOLLIDE (gfxCircle,circleX,circleY,0,hotX,hotY,hotW,hotH)
TEXT 0,0, "Kollision! Maustaste drücken"
FLIP
WAITMOUSE()
ENDGRAPHICS

Spikespine

BeitragMi, März 16, 2005 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Kifferopa:
ImagesCollide prüft beide Bilder auf eine Pixelgenaue kollision!
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

krux

BeitragMi, März 16, 2005 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
du hast den Frame am anfang auf null gestellt du solltest ihn aber immer auf das auch aktivangezeigte bilst Stellen , das geht leicht mit einer Variable.
Du darfst nicht vergessen auch eine Tranzparente Farbe festzulegen

Hubsi

BeitragDo, März 17, 2005 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@krux: Ist ja gut möglich das die Bilder nicht animiert sind Wink

Wie weit bewegst Du den Schuss pro Hauptschleifendurchlauf? Wenn er z.B. 5 Pixel bewegt wird ists klar das er ins Ziel reinragt Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Ebola33

BeitragDo, März 17, 2005 3:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Was unser Hubsi damit sagen will ist,
daß wenn sich dein Schuss nur mit 1. Pixel/Schleifendurchlauf bewegen würde Imagescollide auch auf den Pixel genau wäre. Wink
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

Kifferopa

Gast

BeitragDo, März 17, 2005 17:29
Antworten mit Zitat
Spikespine hat Folgendes geschrieben:
@ Kifferopa:
ImagesCollide prüft beide Bilder auf eine Pixelgenaue kollision!


Aber das weiß ich doch. Habe ich was falsches gesagt? Mr. Green

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group