AW: Gegner auf Spielfeld richtig positionieren
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; |
AW: Gegner auf Spielfeld richtig positionieren
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:
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; |
AW: Gegner auf Spielfeld richtig positionieren
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 ;) |
AW: Gegner auf Spielfeld richtig positionieren
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 ;) |
AW: Gegner auf Spielfeld richtig positionieren
Nein: Solange das Fenster bewegt wird, zeichnet es sich nicht neu ;)
MfG Fabian |
AW: Gegner auf Spielfeld richtig positionieren
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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