Einzelnen Beitrag anzeigen

Bambennos

Registriert seit: 18. Feb 2011
6 Beiträge
 
#3

AW: zu bestimmten Ereignissen Tasten ignorieren

  Alt 9. Apr 2011, 14:59
Vorweg: Ich arbeite an einem 2D Spiel und verwende Andorra 2D...

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then Close;
if (Key = 'a') and (Spieler.IsIdle) then
                                      begin
                                      Spieler.FDistance := 40;
                                      Spieler.RRichtung := Links;
                                      Spieler.IsMoving := true;
                                      end;
if (Key = 'w') and (Spieler.IsIdle) then
                                      begin
                                      Spieler.FDistance := 40;
                                      Spieler.RRichtung := Hoch;
                                      Spieler.IsMoving := true;
                                      end;
if (Key = 'd') and (Spieler.IsIdle) then
                                       begin
                                       Spieler.FDistance := 40;
                                       Spieler.RRichtung := Rechts;
                                       Spieler.IsMoving := true;
                                       end;
if (Key = 's') and (Spieler.IsIdle) then
                                        begin
                                        Spieler.FDistance := 40;
                                        Spieler.RRichtung := Runter;
                                        Spieler.IsMoving := true;
                                        end;


end;
Dann soll er bei jedem Frame berechnen:
Delphi-Quellcode:
if Spieler.IsMoving then
    begin
     Spieler.Schritt();
    end;
und dann:

Delphi-Quellcode:
procedure TSpieler.Schritt();
begin
FDistance := FDistance - FSpeed * Performance.Timegap / 1000;
  case RRichtung of
      Links:begin
      FXpos := FXpos - FSpeed * Performance.Timegap / 1000;
      FXPosTile := FXPosTile - (FSpeed/48) * Performance.Timegap / 1000;
      end;
      Rechts:begin
      FXpos := FXpos + FSpeed * Performance.Timegap / 1000;
      FXPosTile := FXPosTile + (FSpeed/48) * Performance.TimeGap / 1000;
      end;
      Hoch:begin
      FYpos := FYpos - FSpeed * Performance.Timegap / 1000;
      FYPosTile := FYPosTile - (FSpeed/48) * Performance.TimeGap / 1000;
      end;
      Runter: begin
      FYpos := FYpos + FSpeed * Performance.Timegap / 1000;
      FYPosTile := FYPosTile + (FSpeed/48) * Performance.TimeGap / 1000;
      end;
    end;
if FDistance <= 0 then
  begin
  if ((RRichtung = Links) and (GetAsyncKeyState(65) <> 0) or // A
     (RRichtung = Rechts) and (GetAsyncKeyState(68)<> 0 ) or // D
     (RRichtung = Hoch) and (GetAsyncKeyState(87)<> 0) or // W
     (RRichtung = Runter) and (GetAsyncKeyState(83)<> 0)) then // S
     begin
       FDistance := 5;
       end
  else
    FMoving := false;
  end;
end;
*Edit


Delphi-Quellcode:
    // Wenn er aus der Karte herausgeht, dann
    if Spieler.FXposTile >= 26 then //rechts
    begin
    Spieler.FXposTile := 0;
    MapTeilX := MapTeilX + 1;
    Map.Start;
    end;

    if Spieler.FYposTile > 20 then //unten
    begin
    Spieler.FYposTile := 0;
    MapTeilY := MapTeilY +1;
    Map.Start;
    end;

    if Spieler.FXposTile < 0 then //links
    begin
    Spieler.FXposTile := 25;
    MapTeilX := MapTeilX - 1;
    Map.Start;
    end;

    if Spieler.FYposTile < 0 then //oben
    begin
    Spieler.FYposTile := 19;
    MapTeilY := MapTeilY - 1;
    Map.Start;
    end;

Geändert von Bambennos ( 9. Apr 2011 um 15:05 Uhr) Grund: Habe die überprüfung des Verlassens vergessen *_*
  Mit Zitat antworten Zitat