Autor Beitrag
kampfkoloss23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96



BeitragVerfasst: Do 16.01.03 01:32 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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:
ausblenden 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
}

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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: nehe.gamedev.net

Fiji-Fighter
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 17.01.03 22:35 
ich nehem delphiX und denn DXTimer sind schnell genut;)

MFG
mimi
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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)

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 18.01.03 19:46 
ich würde es in einer Unit packen;)
ist mir immer noch zu aufwendig;)

MFG
Michael