Entwickler-Ecke

Multimedia / Grafik - applicationevent on idle (in open gl) oder timer bei Spiel


kampfkoloss23 - Do 16.01.03 01:32
Titel: applicationevent on idle (in open gl) oder timer bei Spiel
ist on idle nur für das Zeichnen, oder auch für die Berechnung zuständig??

Die Berechnung sollte man doch auch abseits mit nem Timer machen und das Zeichenen halt je nach Rechnerleistung oft? Ist das richtig???

Ich hab bei meinem Spiel (noch ohne opengl) nur einem Timer Verwendet wo Zeichnen und Berechnen hintereinander ausgeführt wird.

Das läuft eigentlich gut und wenn ich allerdings Zeichnen und Berechnen in on idle mach wird das ganz ziemlich komisch, genau das hab ich aber irgendwo gelesen

Was meint ihr?? Hat irgendwer Erfahrung in Echtzeit Spiele Entwicklung? Wie hast du das mit Timern oder so geregelt??


OregonGhost - Do 16.01.03 19:10

Bitte, du willst in einem Echtzeitspiel nach einem Timer oder nach einem anderen Event arbeiten?
Vergiss es.

In einem Echtzeitspiel musst du die Gameloop komplett selbst schreiben. Nachrichten nur abfragen wenn nötig (PeekMessage()), und mit Timern geht gar nichts. Wenn es dir nicht auf Genauigkeit ankommt, kannst du GetTickCount() für Zeitfragen nehmen, ansonsten QueryPerformanceCounter(). Viel mehr kann ich dazu nicht sagen, es sei denn natürlich du willst es näher erklärt haben. Vielleicht noch eine Gameloop in Pseudocode:

Quelltext
1:
2:
3:
4:
5:
6:
7:
solange (nicht beenden) {
   Gucken ob Nachricht da ist - wenn ja {
      Nachrichten verarbeiten
   }
   FrameMove (Physik, Logik, KI, Input etc.)
   Szene Rendern
}


Raphael O. - Do 16.01.03 19:16

OregonGhost hat folgendes geschrieben:
In einem Echtzeitspiel musst du die Gameloop komplett selbst schreiben


nur wenn man nur Api benutzt...

mit VCl kann man das ganze in onapplicationeventsidle genausogut machen...

die Berechnungen werden bei kleinen Programmen auch in dieser Prozedur gemacht bzw. wird eine andere Prozedur aufgerufen...

bei größeren Projekten gibt es so genannte Displaylisten, die das ganze schneller machen und nur mit calllist(); aufgerufen werden...

wenn ich es richtig verstanden habe, dann muss da nicht alles neu berechnet werden!?!

kenne mich da aber auch nicht sooo gu aus

tutorial zu displaylists: http://nehe.gamedev.net

Fiji-Fighter


mimi - Fr 17.01.03 22:35

ich nehem delphiX und denn DXTimer sind schnell genut;)

MFG
mimi


OregonGhost - Sa 18.01.03 13:29

Stellt sich allerdings die Frage, was die VCL in einem Echtzeitspiel bringt. Die paar API-Befehle kann man glaub ich gerade noch verkraften.

DelphiX samt DXTimer mag noch eine gute Lösung sein (wenn man DelphiX denn verwenden will), allerdings unterscheiden sich diese Timer deutlich von den Windows-Timern.
Ich würde das Spiel jedenfalls nicht von Windows-Events abhängig machen, denn der Event ist der Feind jedes selbständigen Programms ;C)


mimi - Sa 18.01.03 18:06

der dxTimer soll genauer und Schnller sein als der Normale Delphi Timer.
also für 2D sachen ist delphiX unschlagbar
MFG
Michael


Aya - Sa 18.01.03 18:55

Hi...

Also, egal ob ihr VCL oder API benuzt, bei beidem würde ich den OnIdle Event nehmen.

Wenn ihr mit VCL Arbeitet einfach bei der Komponente TApplicationEvents das OnIdle Event benutzen, und dort nicht vergessen ein

Quelltext
1:
Done:=false;                    

mit einzubauen.

Wenn ihr API Programmiert, einfach dort wo ihr die Messages von Windows abfangt die Szene mitzeichnen.

Zur frage: Wozu VCL in einem Spiel..
Na ja, die frage hab ich mir auch öffters gestellt.. *g* Ich meine.. ich arbeite mit OpenGL auf API ebene... Ich hab KA was es mir da bringen soll wenn ich mit F12 ein Graues, leeres Form angezeigt bekomme das ich sowieso in keinster Weise verwende... *g*

Aber na ja, es gibt harte verfechter die meinen VCL müßte man benutzen dafür, ich halte es für überflüssig...

Allerdings, für dinge wo man z.B. ein MainMenü etc haben soll, ist es natürlich nur zu empfehlen :) (In meinem LevelEditor für mein Spiel mach ich es auch... das Spiel in NonVCL, der LevelEditor mit VCL..)

Au'revoir,
Aya~


mimi - Sa 18.01.03 19:21

also mir ist WinApi zu aufendig das die programm schneller werden das ist mir klar. Aber ich bin zufaul es zu lehren und nutzer deshalb VCL.
Also DelphiX.
ich würde auch gerne WinApi Spiele schreiben.
Es gibt da auch ne komponenten Samlung:Kol oder so änlich.
Aber es gibt noch keine DirecX unterstüung für diese Kol komonenten;)

MFG
Michael


Aya - Sa 18.01.03 19:26

huhu :)

Also von richtiger API PRogrammierung hab ich auch keine ahnung... also wie ich nen Button mache bekomm ich eventuell grad noch so mit biegen und brechen und mit viel Luckie-Generve hin :lol:

Aber... wenn ich nen spiel wie z.B. Snake mache... Da benutzt man doch im grunde NUR die OpenGL befehle und ganz normale SystemFunktionen (Inc, Dec etc).

Das einzige was da dann API dran ist, ist das Fenster an sich zu erzeugen, und das hab ich einmal gemacht und seit dem immer kopiert *gg*

Au'revoir,
Aya~


mimi - Sa 18.01.03 19:46

ich würde es in einer Unit packen;)
ist mir immer noch zu aufwendig;)

MFG
Michael