![]() |
Game Renderer
Hallo,
auf DGL hab ich bisher die Timer und OnIdle Methode gesehen. Aus Java kenne ich jedoch auch soetwas
Delphi-Quellcode:
Gibt es etwas das gegen diese Methode spricht?
begin
Init(); while running do begin input(); update(); render(); sleep(time); end; end; 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 |
AW: Game Renderer
Eine solche Schleife hat die VCL/LCL intern, über onIdle hängst du dich genau dort rein.
|
AW: Game Renderer
Ah.
Ist das OnIdle dann schneller oder besser für die Performance? |
AW: Game Renderer
Es ist sauberer, weil du bei einer eigenen Schleife z.B. immer
Delphi-Quellcode:
aufrufen musst, damit die Anwendung nicht einfriert. Wenn du TApplication.Idle verwendest, kümmert sich TApplication selbst um solche Dinge.
ProcessMessages
|
AW: Game Renderer
Bei aktuelleren Delphi-Versionen aber bitte
![]() |
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. |
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 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz