Seite 1 von 1
SpritePixelCollision mit Sprite3D
Verfasst: 10.04.2006 10:59
von blbltheworm
Hallo zusammen,
ich arbeite zur Zeit an an einem kleinen Ruderspiel in dem man ein Boot steuert und Checkpoints "abrudert".
Jetzt ist mein Problem die Kollision mit den Checkpoints.
Mein Boot wird mit RotateSprite3D gedreht und liegt somit in der dargestellten Form nur als Sprite3DSprite vor.
Wie kann ich jetzt eine pixelgenaue Kollision mit dem Hindernis durchführen??
Am bessten würe es wohl das 3DSprite in ein normalses Sprite zurück zu konvertieren, jedoch hab ich keine Ahnung wie ich das bewerkstelligen soll.
Verfasst: 11.04.2006 19:29
von Kaeru Gaman
check doch einfach die koordinaten...
ich habe noch nie gesehen, daß bei irgendeiner checkpoint geschichte in irgendeinem game eine kollision benutzt wurde.
Verfasst: 12.04.2006 19:59
von blbltheworm
Das geht daher schlecht, da mein Boot länglich ist und ziemlich viel transparents enthält (wegen den Rudern).
Außerdem ist es beim Drehen nacher ungeschickt.
ich hätte gern zuerst eine Koordinatenkollision und anschließend im entsprechenden Bereich eine pixelgenaue gemacht.
Deshalb die Frage.
Verfasst: 12.04.2006 20:13
von Kaeru Gaman
du verstehst nicht, worauf ich hinaus will..
pixelgenaue collision ist dafür absolut unnötig, du musst nicht mit nem checkpoint kollidieren, das sorgt nur für frustration beim spieler..
wenn man checkpoint abrudern muss, dann muss man eine bestimmte strecke zurücklegen, dafür sind die checkpoints da.
wenn man mehr machen muss, als die checkpoints nur zu erreichen, wirds unschön zu spielen...
stell dir vor, der spieler ist wunderbar in fahrt, kriegt ne super kurve, und verfehlt den checkpoint um ein einziges pixel, wird aber daher nicht gewertet...
der schmeißt das spiel in die ecke und schauts nie wieder an.
deswegen: checkpoint müssen erreicht werden, nicht pixelgenau kollidieren, das ist einfach unfug vom gameplay her.
Verfasst: 15.04.2006 20:28
von blbltheworm
ich hab dich schon verstanden.
Das Problem ist aber, dass das Boot in ein Quadrat gepackt wir, in der Höhe jedoch nur 1/5 des Quadrats ausfüllt.
Mit einer simplen Rechteckskollision findet also selbst eine Kollision statt wenn man das Ziel um 2!!!!! Schiffsbreiten verfehlt.
bei einem Drehwinkel von 0°, oder 90° kann man die überprfung zwar anpassen, wenn das Schiff jedoch einmal gedreht ist wird eine Kollision mit einem geeigneten Rechteck sehr aufwenig.
Deshalb beharre ich auch so auf meine Pixel

Verfasst: 15.04.2006 22:13
von Kaeru Gaman
angenommen, dein boot ist 64x64 groß, dann ist der mittelpunkt 32 von dem eckpunkt entfernt....
(das nur, damit du verstehst, wo die 32 her kommt)
Code: Alles auswählen
If BootX+32 > CheckX -9 And BootX+32 < CheckX +9
If BootY+32 > CheckY -9 And BootY+32 < CheckY +9
Debug "Boot ist näher als 8 pixel am Checkpoint!"
EndIf
EndIf
das ist die übliche vorgehensweise. ich kann mir nicht vorstellen, daß jemand pixelkollisionen benutzt für ein problem, dass mit koordinatenchecks viel einfacher zu lösen ist.