AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia [Andorra] - Player Springen Funktion einbauen. [Gelöst]
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra] - Player Springen Funktion einbauen. [Gelöst]

Ein Thema von mimi · begonnen am 11. Nov 2009 · letzter Beitrag vom 12. Nov 2009
Antwort Antwort
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

[Andorra] - Player Springen Funktion einbauen. [Gelöst]

  Alt 11. Nov 2009, 20:35
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.
Miniaturansicht angehängter Grafiken
image04_620.png  
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [Andorra] - Player Springen Funktion einbauen.

  Alt 11. Nov 2009, 21:09
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;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: [Andorra] - Player Springen Funktion einbauen.

  Alt 11. Nov 2009, 23:02
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.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#4

Re: [Andorra] - Player Springen Funktion einbauen.

  Alt 12. Nov 2009, 17:24
Problem gelöst:
Delphi-Quellcode:
  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;
Das musste unter onIDLE. Es kam auf "ActTime:=0" an. Damit wird die Zähler Variable wieder auf Null gesetzt.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz