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:
(http://img219.imageshack.us/img219/6844/glbasicza7.jpg)
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:
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:
// --->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:
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.
Schau dir das mal an :
Hab ich mal vor ein paar Monaten gemacht also Codeschnippsel
http://www.styleattax.de/Jumpkid.rar
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.
4 Sprites für 4 Richtungen.
Ach und nur zur Info:
SPRCOLL (110,Level_X*32+Scrolling_X,Level_Y*32,Spieler,Spieler_X,Spieler_Y)
Du hast das + Scrolling_X vergessen!