AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Gegner auf Spielfeld richtig positionieren

Gegner auf Spielfeld richtig positionieren

Ein Thema von pustekuchen · begonnen am 12. Okt 2010 · letzter Beitrag vom 15. Okt 2010
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Gegner auf Spielfeld richtig positionieren

  Alt 13. Okt 2010, 07:17
Danke Fabian, hast natürlich recht

Dennoch würd ich es dann so machen

Delphi-Quellcode:
type
  TEnemy = class(TObject)
  private
    FPos : TPoint; // Gibt die Position in Pixeln an

    function GetField : TPoint;
  public
    property Field : TPoint read GetField;
    property Pixels : TPoint read FPos write FPos;
  end;

function TEnemy.GetField : TPoint;
begin
  Result.X := FPos.X div 32;
  Result.Y := FPos.Y div 32;
end;
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Gegner auf Spielfeld richtig positionieren

  Alt 13. Okt 2010, 08:31
Hab jetzt entgültig den Fehler gefunden, wodran es liegt das sie halt manchmal früher abbiegen.

Ich habe die Gegner immer nur einen pixel verschoben. Sobald also der Feldrand erreicht wurde zählte schon das nextField vom neuem Feld, obwohl er noch nicht richtig drauf ist und somit sind sie dann zu früh abgebogen.

Habs gelöst
Zitat:
----

Jetzt hab ich aber ein Problem.
Wenn ich die Zeichenprozedur ausführe sobald i-ein gegner bewegt wird, dann läufts so ab:

Code:
Gegner 1 bewegt sich 1 Feld nach vorne...
[ZEICHNEN]
Gegner 1 bewegt sich 1 Feld nach vorne...
[ZEICHNEN]
[..bis 32..]

Gegner 2 bewegt sich 1 Feld nach vorne...
[ZEICHNEN]
Gegner 2 bewegt sich 1 Feld nach vorne...
[ZEICHNEN]
[..bis 32..]

usw..
Also wird jeder gegner nacheinander bewegt. Aber es soll ja so sein als würden, sich alle "gleichzeitig" bewegen.


--
Hier jetzt nochmal die aktuellen Prozeduren:

Delphi-Quellcode:
procedure TFormMain.moveEnemies(value: TGameStatus);
var
  fieldX, fieldY: Integer;
  i,k,j: Integer;
  tmpField :array of TNextField;
begin
  SetLength(tmpField,High(EnemyManager.enemys[FPlayerLevel])-1);
  for k := 0 to High(EnemyManager.enemys[FPlayerLevel]) do
  begin
    fieldX := (EnemyManager.enemys[FPlayerLevel][k].Pixels.X ) div 32;
    fieldY := (EnemyManager.enemys[FPlayerLevel][k].Pixels.Y ) div 32;
    tmpField[k] := map.Playground[fieldX][fieldY].nextField;
  end;

  for j := 0 to 31 do
  begin
    for i := 0 to High(EnemyManager.enemys[FPlayerLevel]) do
    begin
      if EnemyManager.enemys[FPlayerLevel][i].isRunning then
      begin
        case tmpField[i] of
          nfDown: EnemyManager.moveEnemy(EnemyManager.enemys[FPlayerLevel][i],nfDown);
          nfRight: EnemyManager.moveEnemy(EnemyManager.enemys[FPlayerLevel][i],nfRight);
          nfLeft: EnemyManager.moveEnemy(EnemyManager.enemys[FPlayerLevel][i],nfLeft);
          nfUp: EnemyManager.moveEnemy(EnemyManager.enemys[FPlayerLevel][i],nfUp);
          nfStay:
          begin
            EnemyManager.enemys[FPlayerLevel][i].isRunning := false;
            Dec(FPlayerLives);
            initLabels;
            if FPlayerLives = 0 then
            begin
              SetGameStatus(gsGAMEOVER);
              exit;
            end;
          end;
        end;
      end;
    end;
    Draw;
  end;
end;
Delphi-Quellcode:
procedure TEnemyManager.moveEnemy(enemy: TEnemy; next: TNextField);
var Pos: TPoint;
begin
  case next of
    nfDown:
    begin
      Pos.Y := enemy.Pixels.Y+1;
      Pos.X := enemy.Pixels.X;
    end;
    nfRight:
    begin
      Pos.X := enemy.Pixels.X+1;
      Pos.Y := enemy.Pixels.Y;
    end;
    nfUp:
    begin
      Pos.Y := enemy.Pixels.Y-1;
      Pos.X := enemy.Pixels.X;
    end;
    nfLeft:
    begin
      Pos.X := enemy.Pixels.X-1;
      Pos.Y := enemy.Pixels.Y;
    end;
  end;
  if next <> nfStay then
  begin
    enemy.Pixels := Pos;
    Inc(enemy.movedPixel);
  end;
end;

Geändert von pustekuchen (13. Okt 2010 um 10:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

AW: Gegner auf Spielfeld richtig positionieren

  Alt 13. Okt 2010, 09:41
Also ich kann nichts erkennen, du zeichnest 32x das Spielfeld und vorher positionierst du einmal alle Gegner neu.

MfG
Fabian

PS: Und natürlich man sollte lieber die Pixelposition definieren
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Gegner auf Spielfeld richtig positionieren

  Alt 13. Okt 2010, 10:20
Jap, läuft jetzt auch

Danke an alle die geholfen haben

Jetzt läuft es zwar flüssig, aber wenn man das fenster bewegt springt es. Naja kann auch am schwachen Pc liegen
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

AW: Gegner auf Spielfeld richtig positionieren

  Alt 14. Okt 2010, 19:06
Nein: Solange das Fenster bewegt wird, zeichnet es sich nicht neu

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Gegner auf Spielfeld richtig positionieren

  Alt 15. Okt 2010, 07:02
Das ist es ja, ich kann das Fenster nicht vernünftig bewegen,da es springt. Erst zeichnet sozusagen fertig und falls das Fenster bewegt wurde, springt er dort hin.

Am besten schaut man sich das selbst an ^^ Hab mal die aktuellen Datein als Anhang beigefügt.
Angehängte Dateien
Dateityp: rar TD.rar (419,2 KB, 2x aufgerufen)

Geändert von pustekuchen (15. Okt 2010 um 08:40 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:24 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