Hallo,
ich erstelle gerade unter Lazarus(Linux) mit Hilfe von Andorra ein Jump&Ran Game. Nun habe ich Probleme beim Springen. Erst einmal der Code:
Delphi-Quellcode:
procedure TMYSprite.DoMove(TimeGap: double);
var
c:TSprite;
w:double;
begin
inherited DoMove(TimeGap);
if (isPlayer) then begin
if (not isJumping) then begin
if isFall then begin
w:=(y+Height*TimeGap)+(Random+9.9);
y:=w;
end; // Player.isFall
c:=Engine.GetSpriteAt(Round(Engine.WorldX+x+50),Round(Engine.WorldY+y+Height)+1);
isFall:=not Assigned(c);
if Assigned(c) then begin
y:=c.y-c.Height;
// Wenn ich das mit einbaue, hat das einen recht Doofen neben Effekt, siehe unten die Beschreibung
x:=c.x;
end;
end
else begin
if (isJumping) then begin
wert:=wert+1;
if Wert <=30 then begin
// Entweder stimmt meine Formel nicht oder die Werte
Y:=(Y-Height*TimeGap)-2.8;
X:=(X+Width*TimeGap)+2.8;
end
else begin
wert:=0;
isJumping:=False;
end;
end;
end;
end;
// if not isFall then isMove:=False;
end; // TMYSprite.DoMove
Wegen dem Level-Editor verwende ich gleich Große Objekte. Das Problem besteht nun da drin das auf diese Art und weise der Player zwischen zwei Steinen liegt also Praktisch so:
Angenommen wir haben zwei Objekte, jeweils von der Breite: 20 jetzt landet der Player genau da zwischen also zwischen 20 und 20. Ich weiß nicht wie ich das anders beschreiben soll. Zum Schluss noch ein Bild, auf dem der Fehler recht gut zu erkennen ist. Ich möchte gerne Feldweise Springen.
PS: Ich habe natürlich die Such Funktion ausgiebig genutzt. Jedoch keinen Passenden Thread mit einer Lösung gefunden.