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.
SpritePixelCollision mit Sprite3D
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
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
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
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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)
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.
(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
EndIfDer Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.