Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Replay-Funktion in einem Spiel? (https://www.delphipraxis.net/102086-replay-funktion-einem-spiel.html)

calculon 23. Okt 2007 10:43


Replay-Funktion in einem Spiel?
 
Morgen,

ich versuche gerade eine Replay-Funktion in ein Spiel einzubauen. Das mache ich so, dass ich in einem Timer Screenshots von einem Bereich des Screens mache und diese wiederum in einem Timer "abspiele". Mit dem Ergebnis bin ich sehr unzufrieden, weil wenn die Form verdeckt ist, das überdeckende Fenster gespeichert wird und überhaupt kommt' mir diese Lösung sehr wackelig vor.

Hat jemand bessere Ideen eine Replay-Funktion in ein Spiel einzubauen?

Hier ma' die Screenshot-Funktion:
Delphi-Quellcode:
function CaptureScreenRect( ARect: TRect ): TBitmap;
var
  ScreenDC: HDC;
begin
  Result := TBitmap.Create;
  with Result, ARect do
  begin
    Width := Right - Left;
    Height := Bottom - Top;
    ScreenDC := GetDC( 0 );
    try
      BitBlt( Canvas.Handle, 0, 0, Width, Height, ScreenDC,
        Left, Top, SRCCOPY );
    finally
      ReleaseDC( 0, ScreenDC );
    end;
  end;
result.SaveToFile(ExtractFilePath(Paramstr(0))+'replay\'+'Shot'+inttostr(nr)+'.bmp');
nr:=nr+1; // <-- eine globale Variable
result.Free;
end;
Gruß

Calculon
--

OldGrumpy 23. Okt 2007 10:49

Re: Replay-Funktion in einem Spiel?
 
Da Du ja alle Informationen hast, um selber den aktuellen Spielstand zu zeichnen, musst Du diese Daten nur regelmässig speichern. Z.B. welche Figur gerade wo ist, usw. - was da zu speichern ist, hängt natürlich von Deinem Spiel ab. Screenshots vom eigenen Fenster sind da wohl eher suboptimal ;)

calculon 23. Okt 2007 10:52

Re: Replay-Funktion in einem Spiel?
 
Zitat:

Zitat von OldGrumpy
Da Du ja alle Informationen hast, um selber den aktuellen Spielstand zu zeichnen, musst Du diese Daten nur regelmässig speichern. Z.B. welche Figur gerade wo ist, usw. - was da zu speichern ist, hängt natürlich von Deinem Spiel ab. Screenshots vom eigenen Fenster sind da wohl eher suboptimal

Und die Arbeit wollte ich mir eigentlich ersparen (es tummelt sich so einiges auf dem Bildschirm herum http://www.krazz.net/smil/katze[1].gif). Ich hoffe ja auf eine schnellere einfachere Lösung, weil ansonsten das Feature wahrscheinlich ausfällt.

Gruß

Calculon
--

stahli 23. Okt 2007 11:02

Re: Replay-Funktion in einem Spiel?
 
Hallo Calculon,

ich denke auch, dass Du alle Ereignisse mit einem Zeitstempel speichern musst. Das geht schneller und braucht weniger Speicher.

Es gibt Screenrecorder, die alles auf dem Bildschirm mitschneiden (siehe Daniel-Videos), die brauchen aber ganz ordenetlich Prozessorleistung und Zeit. Das ist sicher nicht anders, wenn du Screen-Copys machst.

stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:56 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