Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Game Renderer (https://www.delphipraxis.net/164705-game-renderer.html)

roboter202 25. Nov 2011 18:41

Game Renderer
 
Hallo,

auf DGL hab ich bisher die Timer und OnIdle Methode gesehen. Aus Java kenne ich jedoch auch soetwas

Delphi-Quellcode:
begin

Init();

while running do
begin
  input();
  update();
  render();

  sleep(time);
end;
end;
Gibt es etwas das gegen diese Methode spricht?
Timebased Movement wäre hiermit ja auch möglich.

Und dann würde ich gerne mal wissen ob und wenn ja wie ich denn Texteingaben verarbeiten kann. Wäre bei einem GUI ja möglich. Sollte ich jeden Frame die gedrückten Tasten abfragen und zu einem Puffer hinzufügen? Oder gibt es da besser Lösungen.

Danke im Vorraus an die beste, schnellste und freundlichste Community im Internet!:-D

igel457 25. Nov 2011 19:55

AW: Game Renderer
 
Eine solche Schleife hat die VCL/LCL intern, über onIdle hängst du dich genau dort rein.

roboter202 25. Nov 2011 20:00

AW: Game Renderer
 
Ah.

Ist das OnIdle dann schneller oder besser für die Performance?

Namenloser 25. Nov 2011 20:03

AW: Game Renderer
 
Es ist sauberer, weil du bei einer eigenen Schleife z.B. immer
Delphi-Quellcode:
ProcessMessages
aufrufen musst, damit die Anwendung nicht einfriert. Wenn du TApplication.Idle verwendest, kümmert sich TApplication selbst um solche Dinge.

himitsu 25. Nov 2011 20:10

AW: Game Renderer
 
Bei aktuelleren Delphi-Versionen aber bitte Delphi-Referenz durchsuchenTApplicationEvent und dessen Ereignisse verwenden, anstatt sich direkt an Ereignisse des Application zu hängen.

Medium 25. Nov 2011 23:45

AW: Game Renderer
 
Naja, das endgültig sauberste wäre es wohl, seine eigene, angepasste WndProc() zu bauen. Zumindest für das Mainform, um darüber die Aktivität des Prozesses gegenüber dem OS zu wahren. Was die gesamte Logik angeht, so würde ich - bei einem Spiel - so vorgehen: Die eigene WndProc baut eine Liste der Eingaben, und es gibt einen "Master"-Thread, der quasi folgendes tut:
- Liste der WndProc abarbeiten (aka Controller-Eingaben auslesen)
- Spiellogik des nächsten Frames durchrechnen (logische Objekte, Spielerposition, Physik, etc.)
- Rendern (D3D/OGL bis zum Present/Flip/Whatever)
- rinse and repeat

Alles unter völligem Verzicht des Kissens der VCL natürlich, da die bestenfalls bei solchen Vorhaben hinderlich ist.

Namenloser 26. Nov 2011 02:16

AW: Game Renderer
 
Wenn du noch mehr Overkill willst, kannst du auch noch die Spiellogik und das Rendering (das eigentliche Rendering findet natürlich eh auf der Grafikkarte statt, aber es gibt ja noch andere Dinge zu erledigen, z.B. Texturen und Models laden) in separaten Threads ablaufen lassen...

Aber in 99% der Fälle lohnt sich der ganze Aufwand nicht und man fährt mit OnIdle gut...


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