Kollisionsabfrage bei gedrehten Sprites (2D)

Previous topic - Next topic

Tiuz

Hallo zusammen,

Ist das so richtig?:
Die pixelgenaue Kollisionsabfrage (SPRCOLL) funktioniert nur exakt, wenn die Sprites sich in ihrer Orginalausrichtung befinden, und nicht mit ROTOSPRITE gedreht wurden?

Wenn meine Annahme richtig ist, wie kann man eine pixelgenaue Abfrage unter beliebigen Winkeln realisieren?

Freue mich über alle hilfreichen Antworten!

Tiuz.

Edit: Vieleicht noch eine Newbie Frage dazu: Kann man im 2D Modus den sichtbaren Bildausschnitt verschieben, um ein Scrollen zu erreichen?

Kitty Hello

Hi,

also, bei gedrehten Sprites geht keine Pixelabfrage -> das könnte man auch nicht abwarten, so langsam wird das.
Scrolling macht man, indem man einfach alle SPRITE Befehle um ein offset_x und offset_y verschiebt.


Code (glbasic) Select
DIM hit[10][10]
FOR x=0 TO 9; FOR y=0 TO 9; hit[x][y]=RND(9);NEXT;NEXT

WHILE TRUE
   MOUSESTATE mx, my, b1, b2
   offsetx = mx
   offsety = my
   FOR x=0 TO 9
      FOR y=0 TO 9
         // SPRITE hit[x][y], x*32+offsetx, y*32+offsety
         PRINT hit[x][y], x*32+offsetx, y*32+offsety
      NEXT
   NEXT


WEND

Tiuz

Vielen Dank für die ausführlich Antwort!

Zum Scroling:
Ich schreibe eine Art 2D Rennspiel, bei dem das vom Spieler gesteuerte Fahrzeug mittig im Bild stehen soll.
Wie kann ich eine feste Rennstrecke erzeugen, die grösser als der Bildschirm ist?
Wenn ich es richtig verstanden habe, ist der Hintergrund (LOADBMP) nicht gegen den Bildschirm verschiebbar. Das heist also, feste Merkmale der Strecke (Begrenzungen, Bäume etc.) müssten als Sprites dargestellt werden?

Zur Kollsision bei gedrehten Sprites:
was ist da der übliche Weg, einige BOXCOLL / Umdrehung?

Tiuz.

Kitty Hello

Also, für Scrolling würde ich das Spiel aus "Blöcken" zusammenstellen und mit SPRITE zeichnen. So mach' ich das auch in Wumbo's Adventure (Showroom).

Kollision von gedrehten Objekten würde ich über Kreis-Kreis Kollision machen:
Code (glbasic) Select
FUNCTION CircleCircleCheck: x1,y1,R1,  x2,y2,R2
LOCAL dx, dy, dR
   dx = x1-x2
   dy = y1-y2
   dR = R1+R2
   // SQR(dx*dx + dy*dy) < R1+R2
   IF dx*dx + dy*dy   <   dR*dR
      RETURN TRUE
   ENDIF
RETURN FALSE
ENDFUNCTION
ungetested, aber passt scho' ;)

Baggi

Hi Tiuz,

ich hab mal ein Tutorial zur 2D Spieleprogrammierung geschrieben, unter http://www.baggisoft.gmxhome.de/tut.html kannst du es runterladen.
Da gibt es auch was zum Scrolling.

Grüße
Baggi

Tiuz

Hallo Baggi,

ich habe dein Jamiacat schon im Showroom gesehen, und mich gefragt, wie es funktioniert. Leider kann ich das Tutorial auf deiner Seite nicht runterladen (Error 404).

[edit - email unlseserlich gemacht wg. Spam]
Vieleicht könntest du es mir mailen? (ulrich_keller :o gmx :o de)

Tiuz.

Baggi