Problem mit Kollisionen

Previous topic - Next topic

Aniel

Hallo liebe GLBasic Gemeinde. Ich habe ein Problemchen mit den Kollisionen in meinem Test-Jump and Run. Ich kriege es ums verrecken nicht hin, den Hauptcharakter mit nem Block kollidieren zu lassen.

Hier mal ein  Bild der Situation:


Der Charakter soll einfach mit den in der Luft hängenden Plattformen kollidieren, sprich, wenn er es berührt soll er stehen bleiben oder wenn er drauf hüpft soll er nicht durchfallen. Vom Ansatz her hab ich auch kein Problem damit, das Problem ist, das erst gar keine Kollision stattfindet.

Die Map ist folgendermaßen aufgebaut:

Code (glbasic) Select
DIM Hintergrund[5][1]

FOR Hintergrund_X = 0 TO 4
FOR Hintergrund_Y = 0 TO 0
Hintergrund[Hintergrund_X][Hintergrund_Y] = 0
NEXT
NEXT

DIM Level[125][19]

FOR Level_X = 0 TO 124
FOR Level_Y = 0 TO 18
IF Level_Y = 18
Level[Level_X][Level_Y] = 1
ELSE
Level[Level_X][Level_Y] = 0
ENDIF
NEXT
NEXT

Level[10][16] = 2
Level[11][16] = 2
Level[13][15] = 2
Level[14][15] = 2
Level[15][15] = 2
Level[16][15] = 2
Level[17][15] = 2
Level[18][15] = 2

Level[13][14] = 3
Level[14][14] = 3
Level[15][14] = 3
Level[16][14] = 3
Level[17][14] = 3
Level[18][14] = 3

WHILE TRUE
FOR Hintergrund_X = 0 TO 4
FOR Hintergrund_Y = 0 TO 0
DRAWSPRITE 108 ,Hintergrund_X*800 + Scrolling_X,Hintergrund_Y*576
NEXT
NEXT

FOR Level_X = 0 TO 124
FOR Level_Y = 0 TO 18
IF Level[Level_X][Level_Y] = 1
DRAWSPRITE 109 ,Level_X*32 + Scrolling_X,Level_Y*32
ENDIF
IF Level[Level_X][Level_Y] = 2
DRAWSPRITE 110 ,Level_X*32 + Scrolling_X,Level_Y*32
ENDIF
IF Level[Level_X][Level_Y] = 3
DRAWSPRITE 111 ,Level_X*32 + Scrolling_X,Level_Y*32
ENDIF
NEXT
NEXT
SHOWSCREEN
WEND
Die Bewegung des Spielers funktioniert nach folgendem Prinzip:

Code (glbasic) Select
// --->Nach Rechts gehen


IF KEY (205) AND KEY (203) = 0 AND KEY (42) = 0 AND Jump = 0 AND Angriff = 0  
      Richtung = 0                                                               //O = Rechts
      Bewegung = 1                                                               //Bewegung ist vorhanden
      Geschwindigkeit = 2                                                        //Geschwindigkeit wird festgelegt

      IF Spieler <= 2 OR Spieler >= 7 THEN Spieler = 2           //Sprite für Animation              

      IF Timer < GETTIMERALL()              
        INC Spieler, 1                      
        Timer = GETTIMERALL() + AniVer      
      ENDIF

      INC Spieler_X, Geschwindigkeit
ENDIF
Ich habe da jetzt schon alles versucht was mir so eingefallen ist, aber ich schaffe es einfach nicht, dass überhaupt eine Kollision stattfindet.

Mein Ansatz war in etwa der:

Code (glbasic) Select
IF SPRCOLL (110,Level_X*32,Level_Y*32,Spieler,Spieler_X,Spieler_Y)
//110 sind die Plattformen und sie sind 32*32 groß
PRINT "EINE KOLLISION FINDET STATT!!!!!!!!!!!!" ,100,100
ENDIF
Funktionieren tut es aber nicht. Ich habe auch schon versucht ein Rechteck um den Char und legen und das dann zum Sprite zu machen um darüber die Kollision laufen zu lassen, aber auch da kein Erfolg. Bin mit meinem Latein am Ende, habe schon alle Tutorials durchgeschaut (z.B. JumpKid, Jamaicat,.....) aber schaffe es trotzdem nicht. Bitte um Hilfe^^

LG
Aniel



EDIT: Das sind nur Codeausschnitte. Wenn ich den Projektordner mal hochladen soll um einen besseren Überblick zu verschaffen, kann ich das gerne machen.

Schranz0r

Schau dir das mal an :

Hab ich mal vor ein paar Monaten gemacht also Codeschnippsel

http://www.styleattax.de/Jumpkid.rar
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Aniel

Hab ich mir schon angeschaut, bringt mich aber nicht wirklich weiter, da ich da nicht genau verstehe wie du jetzt ne Kollision erzeugst. Ich hab zwar gecheckt, das du Linien zeichnest und die dann mit den Sprites kollidieren lässt, aber wieso und warum ist daraus nicht ersichtlich, da es unübersichtlich und nahezu gar nicht dokumentiert ist.

Schranz0r

4 Sprites für 4 Richtungen.

Ach und nur zur Info:


Code (glbasic) Select
SPRCOLL (110,Level_X*32+Scrolling_X,Level_Y*32,Spieler,Spieler_X,Spieler_Y)Du hast das + Scrolling_X vergessen!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard