problem mit der kollision...

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

played2often

Betreff: problem mit der kollision...

BeitragDi, Okt 07, 2008 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Okt 08, 2008 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Okt 08, 2008 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Okt 08, 2008 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Das Problem bei den Tuts ist immer das man den Code einfach abändert ohne ihn zu verstehn (spreche aus erfahrung Wink)
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group