AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Cross-Platform Game Loop

Ein Thema von milos · begonnen am 31. Jul 2016 · letzter Beitrag vom 31. Jul 2016
Antwort Antwort
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Cross-Platform Game Loop

  Alt 31. Jul 2016, 11:10
Dann mach es doch so wie es da steht ... Für die Taktung nimmst du einen Timer und los geht es
Du willst mir doch nicht ernsthaft TTimer dafür vorschlagen? Soweit ich weiss ist der von Natur aus ungenau und das etwa zu 15ms. Mal mehr mal weniger und schon verabschiedet sich das flüssige Bild... Ich dachte eher an Window-Messages oder so ähnlich... Da ist mir gerade TApplication.OnIdle in den Sinn gekommen. Vielleicht geht es ja damit wie ich es mir vorstelle.

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Cross-Platform Game Loop

  Alt 31. Jul 2016, 11:23
Schau dir das Konzept einmal genau an, dann siehst du dass diese "Ungenauigkeit" überhaupt nicht interessiert. Den Rest erledigt das "träge" Auge des Betrachters

Und egal wie genau dein Timer ist es bleibt immer eine Zeitspanne x zwischen Signalisierung durch den Timer und der Darstellung. Dieses x ist abhängig von der allgemeinen Systemperformance, der aktuellen Systemauslastung, ...

Meinst du wirklich, das da ein 15ms Delta ins Gewicht fällt? Das ist im Übrigen eine Zeitspanne, die das menschliche Auge nicht wahrnehmen kann
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Cross-Platform Game Loop

  Alt 31. Jul 2016, 11:50
Meinst du wirklich, das da ein 15ms Delta ins Gewicht fällt?
Auf jeden Fall. 15ms entsprechen ungefähr 60fps, was nach heutigen Standard die Mindestanforderung an ein Spiel auf dem PC ist.

Das ist im Übrigen eine Zeitspanne, die das menschliche Auge nicht wahrnehmen kann
Das ist ein Gerücht. Das Auge ist schneller, nur das Gehirn ist lahm. Wer schon mal 60 vs. 120fps Vergleichmaterial gesehen hat, merkt dass doch mehr Information rüber kommen ... vor allem bei schnellen Bewegungen und Drehungen.

Ich dachte eher an Window-Messages oder so ähnlich...
Soweit ich weiß ist TTimer ein Wrapper um die Timer-Messages.

Ich würde auch auf die Messages verzichten und eine hochauflösende Uhr in einer Schleife (bzw. in onIdle) verwenden. Wenn du dann merkst, das noch viel Zeit über ist, kannst du ja immer noch schlafen. Alternativ könnte man sich Waitable Timer Objects angucken, die sehen ziemlich gut aus. SDL2 scheint QueryPerformanceCounter zu benutzen.

Dieses x ist abhängig von der allgemeinen Systemperformance, der aktuellen Systemauslastung, ...
Wenn da im Hintergrund noch etwas anderes aufwendiges läuft, sollte man vielleicht kein Spiel starten.


Für konventionelle Anwendungen würde ich SirRufo zustimmen, aber Multimedia ist doch etwas anderes.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (31. Jul 2016 um 12:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Cross-Platform Game Loop

  Alt 31. Jul 2016, 12:23
Danke Bug. Habe nun ein wenig mit OnIdle gespielt, das scheint mir ein Vernünftiger Weg zu sein.

Danke für den Link der Waitable Timer Object, das sieht sehr interessant aus und könnte sich als Nützlich erweisen.

Und ja, den Unterschied zwischen 30 - 60 - 120 (- 144 [nicht mehr so stark von 120 zu unterscheiden aber doch ein wenig]) sieht man mit einem geübten Auge sofort und wenn man sich 144hz gewöhnt ist (so wie ich) tun 30 FPS schon fast weh in den Augen. 60 wäre ertragbar aber nicht mit zusätzlichen TTimer rucklern, ist nämlich fast genau so schlimm x)

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#5

AW: Cross-Platform Game Loop

  Alt 31. Jul 2016, 12:41
Hmm..

Ich hab zwar keine Ahrnung von Spielprogrammierung, aber..

Delphi-Quellcode:
begin
  while Running do
  begin
    Input;
    Update;
    Draw;
    Application.ProcessMessages;
  end;
end;
Wenn die Funktionen hier zum Teil von SubThreads ausgeführt werden, kann sich der MainThread alleine um ProcessMessages und Draw kümmern..

Jeder Thread 'liest' den Input und 'berechnet' das Update eigenständig.
Da hier nur das 'lesen' z.B. per CriticalSection geschützt werden muss, ist auch kein Thread-Problem zu erwarten.

Der MainThread rüft dann zyklisch (z.B. alle x ms) das Draw der SubThreads auf und lässt dort das reine Zeichnen laufen, welche (interner Zugriff ebenfalls über CS geschützt) die vorab bereits berechneten Position des Objektes im Thread des MainThread zeichnet.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Cross-Platform Game Loop

  Alt 31. Jul 2016, 23:55
Gameloop.... Ganz einfach...

UI Thread...

Delphi-Quellcode:
TTask.Run(Procedure
begin
  While GameRunning do
    begin
      Starte Stopuhr...
      Warte bis alle Threads ein Frame erzeugt haben
      Stoppe die StopUhr
      SingnaleThreadNextFrame;
      if StopUhr < 16 then
        Sleep(16-Stopuhr)
      Syncronize(DisplayFrame);
    end
end;
Mavarik
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:45 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