Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Gegner auf Spielfeld richtig positionieren

  Alt 12. Okt 2010, 13:34
Zeichne alles auf ein Offscreenbitmap (dh. einfach bmp Instanz erstellen und auf dessen Canvas zeichnen) und letzendlich diese dann auf die Paintbox/Canvas klatschen.
ODER noch angenehmer - du verwendest diese zuvor schon genannte und von haus aus implementierte Methode per "DoubleBuffered := True;"

Edit:
Noch etwas zum Code:
1. setz in Delphi Tags und nicht Code Tags [ DELPHI ]
2. der letzte Befehl in drawEnemIEs() gefällt mir nicht:
Delphi-Quellcode:
procedure TEnemyManager.drawEnemys(level: Integer);
var i: integer;
begin
  bmEnemys.Canvas.Brush.Color := clFuchsia;
  bmEnemys.Canvas.Rectangle(-1,-1,513,513);
  bmEnemys.Canvas.Brush.Color := clBlue;
  for i := 0 to High(enemys[level]) do
  begin
    if enemys[level][i].isRunning then
    begin
      bmEnemys.Canvas.Rectangle(
        enemys[level][i].PosX+10, //ANHANG 1!
        enemys[level][i].PosY+10, // Hier läufts flüssig, aber 'schief' :/
        enemys[level][i].PosX+15,
        enemys[level][i].PosY+15);
// bmEnemys.Canvas.Rectangle( // ANHANG 2!Zeichnet die Gegner
// enemys[level][i].FeldX*32, // Oben links in die ecken der Felder
// enemys[level][i].FeldY*32, // Kein flüssiger spielverlauf,
// enemys[level][i].FeldX*32+10, // da Gegner NUR in die mitte
// enemys[level][i].FeldY*32+10); // des Feldes gezeichnet werden
    end;
  end;
  uFormMain.FormMain.pb.Canvas.Draw(0,0,bmEnemys);
end;
Besser und wiederverwertbarer wäre es, wenn du der Methode den Parameter Canvas gleich mitgibst ala:

Delphi-Quellcode:
procedure TEnemyManager.drawEnemies(Canvas: TCanvas; level: Integer);
{...}
begin
{...}
  Canvas.Draw( 0, 0, bmEnemies );
end;
Die Begründung wäre eben - deine Klasse TEnemyManager wäre somit nicht abhängig von "uFormMain.FormMain.pb.Canvas" dh du könntest diesen Manager dann später auch einmal bei anderen Canväsen einsetzen

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (12. Okt 2010 um 13:40 Uhr)
  Mit Zitat antworten Zitat