![]() |
[Andorra] - Player Springen Funktion einbauen. [Gelöst]
Liste der Anhänge anzeigen (Anzahl: 1)
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:
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:
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 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. |
Re: [Andorra] - Player Springen Funktion einbauen.
Betrachte dir mal die Funktionen "Collision" und "DoCollision": Damit bekommst du es automatisch mit, wenn eine Kollision mit einem anderen Objekt stattfindet.
Beispiel (nur als Gedankenanstoß verwenden):
Delphi-Quellcode:
type
TMySprite = class(TSprite) private FHasCollision: boolean; protected procedure DoCollision(Sprite: TSprite; var Done: boolean);override procedure DoMove(TimeGap: Double);override; end; [...] procedure TMySprite.DoMove(TimeGap: Double);override; begin //Bewege die Figur... //Prüfe auf Kollisionen FHasCollision := false; Collision; if FHasCollision then begin //Mache die Bewegung rückgängig end; end; procedure TMySprite.DoCollision(Sprite: TSprite; var Done: boolean);override; begin if Sprite is TWall then FHasCollision = true; end; |
Re: [Andorra] - Player Springen Funktion einbauen.
Da hast du mich Falsch verstanden. Das Problem ist nicht die Collisions Erkennung, sondern der Sprung an sich. Ich möchte mich gerne Feld-Weise bewegen. Die Collision an sich ist überhaupt kein Thema.
|
Re: [Andorra] - Player Springen Funktion einbauen.
Problem gelöst:
Delphi-Quellcode:
Das musste unter onIDLE. Es kam auf "ActTime:=0" an. Damit wird die Zähler Variable wieder auf Null gesetzt.
if (Player.isJumping) then begin
inc(Player.wert); if Player.Wert <=15 then begin if ActTime >=50 then begin Player.Y:=(Player.Y-Player.Height); Player.X:=(Player.X+Player.Width); ActTime:=0; end; end else begin Player.wert:=0; Player.isJumping:=False; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz