problem mit der kollision...
Übersicht

played2oftenBetreff: problem mit der kollision... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo, ich habe folgendes problem und zwar versuche ich die kollisionsabfrage aus diesem tut zu ändern, das problem dabei ist das ich das mit der kollision halt nicht wiklich verstehe... die figur und die tiles sind 32*32 aber ich möchte einen 32*64 player, könnte mir da einer helfen die kollisionsabfrage zu ändern? ich habe sie schon ein bisschen angepasst aber irgendwie...
Code: [AUSKLAPPEN] 'Tutorial 2. Hinzuf�gen einer Spielfigur inklusiv Begrenzungen 'Nachdem wir den Level auf dem Bildschirm gemalt hatten, wollen wir auch eine Spielfigur hinzuf�gen. 'Ebenfalls m�ssen wir Begrenzungen f�r die R�nder setzen und die Kollisionen mit der Plattform testen. 'Weil diese Kollisionsabfrage in gr��eren Level ziemlich umst�ndlich werden kann, �berpr�fen wir nur, 'welche Tiles (Grafiken) um den Spieler herum existieren. Graphics 640,480 frametimer = CreateTimer (30) 'Gfx laden SetMaskColor 255, 0, 255 Global tile = LoadImage ("tile2.bmp") '32*32 Global dude = LoadImage ("player.bmp") '32*64 'Variablen und Constante bestimmen Global Player_pos_x = 200 'Spielekoordinaten setzen. Um die Variablen in den Routinen benutzen zu Global Player_pos_y = 320 'k�nnen, m�ssen diese Globalisiert werden 'Um die Cursorsteuerung etwas zu vereinfachen, habe ich die Werte gleich in 'Constante (unver�nderbare) Variablen gespeichert. Const rauf = 200, runter = 208, rechts = 205, links = 203, space = 57 'Kartendaten lesen Global map [20+1,15+1] RestoreData mapdata For y=0 To 14 For x=0 To 19 ReadData map(x,y) Next Next 'Hauptschleife Repeat Cls WaitTimer (frametimer) DrawMap() 'Karte malen MoveDude() 'Figur berechnen DrawImage dude, Player_pos_x, Player_pos_y 'Figur zeichnen Flip Until KeyDown(KEY_ESCAPE) Or AppTerminate() End 'Functionen Function DrawMap() For y = 0 To 14 For x = 0 To 19 If map(x,y) = 1 Then DrawImage tile, x*32, y*32 EndIf Next Next End Function Function MoveDude() If KeyDown(KEY_LEFT) Then If map(Player_pos_x /32,(Player_pos_y +16) /32)=0 And map(Player_pos_x /32,(Player_pos_y +48) /32)=0 Then Player_pos_x = Player_pos_x -4 If Player_pos_x =< 0 Then Player_pos_x = 1 EndIf ElseIf KeyDown(KEY_RIGHT) Then If map((Player_pos_x +32) /32,(Player_pos_y +16) /32)=0 And map((Player_pos_x +32) /32,(Player_pos_y +48) /32)=0 Then Player_pos_x = Player_pos_x +4 If Player_pos_x => 608 Then Player_pos_x = 607 EndIf ElseIf KeyDown(KEY_UP) Then If map((Player_pos_x +16) /32,Player_pos_y /32)=0 Then Player_pos_y = Player_pos_y -4 If Player_pos_y =< 0 Then Player_pos_y = 1 EndIf ElseIf KeyDown(KEY_DOWN) Then If map((Player_pos_x +16) /32,(Player_pos_y +64) /32)=0 Then Player_pos_y = Player_pos_y +4 If Player_pos_y => 448 Then Player_pos_y = 447 EndIf EndIf End Function #mapdata DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst alle Tiles 32*64 gross oder du überprüfst das feld wo der player ist und eins rechts davon, hoffe ist halbwegs verständlich (: | ||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
played2often |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, aber jetzt habe ich das problem wenn die figur den boden berührt das sie sicht nicht mehr bewegen lässt???
Code: [AUSKLAPPEN] Function MoveDude()
If KeyDown(KEY_LEFT) Then If map(Player_pos_x /32,Player_pos_y /32)=0 And map(Player_pos_x /32,(Player_pos_y +32) /32)=0 And map(Player_pos_x /32,(Player_pos_y +64) /32)=0 Then Player_pos_x = Player_pos_x -4 If Player_pos_x =< 0 Then Player_pos_x = 1 EndIf ElseIf KeyDown(KEY_RIGHT) Then If map((Player_pos_x +32) /32,Player_pos_y /32)=0 And map((Player_pos_x +32) /32,(Player_pos_y +32) /32)=0 And map((Player_pos_x +32) /32,(Player_pos_y +64) /32)=0 Then Player_pos_x = Player_pos_x +4 If Player_pos_x => 608 Then Player_pos_x = 607 EndIf ElseIf KeyDown(KEY_UP) Then If map(Player_pos_x /32,Player_pos_y /32)=0 And map((Player_pos_x +32) /32,Player_pos_y /32)=0 Then Player_pos_y = Player_pos_y -4 If Player_pos_y =< 0 Then Player_pos_y = 1 EndIf ElseIf KeyDown(KEY_DOWN) Then If map(Player_pos_x /32,(Player_pos_y +64) /32)=0 And map((Player_pos_x +32) /32,(Player_pos_y +64) /32)=0 Then Player_pos_y = Player_pos_y +4 If Player_pos_y => 448 Then Player_pos_y = 447 EndIf EndIf End Function |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was hast du denn da geändert ?
Das +16 mit /32 Ich kann das ned ganz nachvollziehn, du must einfach anstat nur ein Feld zu überprüfen auch noch das rechts vom Mänchen überprüfen (da es ja so länglich sein soll) Ich würd, wenn ich dich wär, mich nicht in Kleinigkeiten verlieren sondern,falls es nicht notwendig ist, erstmall alles andere machen ![]() Das Problem bei den Tuts ist immer das man den Code einfach abändert ohne ihn zu verstehn (spreche aus erfahrung ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group