AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Game Renderer

Ein Thema von roboter202 · begonnen am 25. Nov 2011 · letzter Beitrag vom 26. Nov 2011
Antwort Antwort
roboter202

Registriert seit: 6. Mär 2011
98 Beiträge
 
Delphi 6 Professional
 
#1

Game Renderer

  Alt 25. Nov 2011, 17:41
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!
Christian
i := 0 ; While i = 0 do beep ;

Geändert von roboter202 (25. Nov 2011 um 18:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Game Renderer

  Alt 25. Nov 2011, 18:55
Eine solche Schleife hat die VCL/LCL intern, über onIdle hängst du dich genau dort rein.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
roboter202

Registriert seit: 6. Mär 2011
98 Beiträge
 
Delphi 6 Professional
 
#3

AW: Game Renderer

  Alt 25. Nov 2011, 19:00
Ah.

Ist das OnIdle dann schneller oder besser für die Performance?
Christian
i := 0 ; While i = 0 do beep ;
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Game Renderer

  Alt 25. Nov 2011, 19:03
Es ist sauberer, weil du bei einer eigenen Schleife z.B. immer ProcessMessages aufrufen musst, damit die Anwendung nicht einfriert. Wenn du TApplication.Idle verwendest, kümmert sich TApplication selbst um solche Dinge.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: Game Renderer

  Alt 25. Nov 2011, 19:10
Bei aktuelleren Delphi-Versionen aber bitte Delphi-Referenz durchsuchenTApplicationEvent und dessen Ereignisse verwenden, anstatt sich direkt an Ereignisse des Application zu hängen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Game Renderer

  Alt 25. Nov 2011, 22:45
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Game Renderer

  Alt 26. Nov 2011, 01:16
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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