Hi,
ich stehe vor einem Problem, dessen Lösung ich mir wesentlich leichter vorgestellt habe
Also folgendes:
Möchte gerade ein Jump'n'Run programmieren. Dazu habe ich mir erst mal ein einfaches Mapformat erstellt, das per 0/1 abpeichert, auf welchen Feldern sich ein Feld befindet auf dem man dann laufen kann.
Das funktioniert auch soweit. Nun möchte ich die Spielfigur auf diesem "Laufsteg", wie er in der Mapdatei gespeichert ist, bewegen. Als erstes möchte ich dazu die Gravitationsabfrage realisieren, d.h. wenn kein Grund mehr unter dem Spieler ist, muss er runterfallen.
Meine bisherigen Versuche klappten zwar so einigermaßen, wiesen aber doch so manche Fehler auf. Meine momentane Abfrage sieht folgendermaßen aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| if ((Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35)))=0) and (Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35))+1)=0)) and (Game.Control.gibPressedKeys(39)) then begin result := -1; end else if ((Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35)+2))=0) and (Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35))+1)=0)) and (Game.Control.gibPressedKeys(37)) then begin result := -1; end else if ((Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35)))=0) and (Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35))+1)=0) and (Game.map.gibFrontWall(trunc((Game.player.gibPosY + 105) / 35),trunc(((-Game.Map.gibPosX + Game.Player.gibPosX) /35))+2)=0)) and not (Game.Control.gibPressedKeys(39)) and not (Game.Control.gibPressedKeys(37)) then begin result := -1; end else begin result := trunc((Game.player.gibPosY + 105) / 35); end; |
Wenn result=-1, dann wird der Spieler in der Steuerung nach unten bewegt, fällt also runter. PressedKey(39) ist Bewegung nach rechts, 37 nach links.
Nun funktioniert das zwar ein bisschen, aber es gibt z.B. folgenden Fehler. Wenn ich so stehe wie auf dem angehängten Screenshot, und mich dann nach rechts bewege, falle ich durch den Stein durch. Ist auch logisch, weil die Abfrage das eben so vorsieht..
Ich weiß aber nicht, wie man so etwas unterbinden kann. Ich hoffe, ihr könnt mir Lösungsvorschläge geben, wie diese Abfrage am einfachsten und effektivsten und vor allem so das sie auch wirklich immer richtig funktioniert geben.
Danke + Grüße
Passi