Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du sollst (wenn du mit Timer meine Methode meinst) den Timer ja nur nutzen um damit die Renderschleife zu starten, der wird also nur einmal aufgerufen. Du renderst also nicht in einem Timer, sondern stösst bei dessem ersten Aufruf deine Renderschleife an und deaktivierst ihn dann.
achso, und wie soll die Renderschleife tun? eine Endlosschleife?
Wie reagiere ich dann auf Systemeingaben zum Bleistift KeyDown/Up Resize Mouse Move etc. bla bla?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Mit Application.Processmessages. Also als Renderschleife eine Endlosschleife (die z.b. auf Game.Quit prüft), da dan Rendern und nach dem Rendern Application.ProcessMessages aufrufen, dann werden alle Windowsbotschaften abgearbeitet.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Es werden nicht alle Botschaften abgearbeitet. Denn wenn jemand im Fenster arbeitet und man versucht dieses Fenster zu schließen, dann werden diese Schließenbotschaften ignoriert. Also sowohl ALT+F4 als auch der Schließenbutton bzw auch der Aufruf von Close aus dem Code werden ignoriert!
Wenn man im Vollbild arbeitet, dann mag das okay sein. Aber in einer anderen Anwendung muss man darauf reagieren und entsprechend die Endlosschleife verlassen bzw per Halt die Anwendung abschließen. Wobei ich persönlich immer für die sanftere Variante bin. Ich steige ja aus meinem Auto auch lieber durch die Tür als durchs Fenster aus. Es sollte ausreichen, wenn man eine Schleifenabbruch Variable im OnClose entsprechend setzt damit die Endlosschleife abgebrochen wird. Dann sollte sich die Anwendung ganz normal beenden.
OnCreate ein Timer der eine RenderSchleife die auf eine bestimmte boolsche prüft, oder zwei, zum beispiel Close und GameOver oder wat weiss ich.
Dann im OnClose ereignis die Close = true setzen.
Und innerhalb der Schleife (wo auch immer) ein Application.processmessages. Fehlt da noch was?
Schliesst das dann das "Lagg" problem aus? oder is das nur ein Tropfen auf dem heissen Stein? (bin grad an nem Schul PC ^^ kein Delphi hier zum testen xD)
Hallo, wollte mal fragen, ob das Problem nun bei dir gelöst ist? Bei mir ist das Problem ebenfalls (allerdings in Fullscreen). Ich merke auch immer deutliche Hänger.
Aber wäre der Timer nicht sinnlos? Könnte man nicht einfach nur eine Procedure schreiben, da ne Endlosschleifen reinpacken und in die Endlosschleife den ganzen Render-Kram? Die Procedure würde dann am Ende von OnCreate aufgerufen werden und die Endlosschleife würde rennen. Für was der Timer?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Der Timer stösst die Renderschleife ja nur an, ausserdem sollte man dort auch die Daten laden, denn dann kann man schön einen Ladefortschrittsschirm zeigen. Wenn man das alles in OnCreate packt, kann man noch nichts rendern (da die Form ja nicht sichtbar ist) und auch keinen Ladeschirm o.ä. anzeigen.
Ah ok. Das macht Sinn, dankeschön Gleich mal ausprobieren.
Edit: Ok, ist nun deutlich flüssiger (zwar immernoch kleine Hänger drin, aber ich denke eher dass das an meinem schrottigen Grafikchip im Notebook liegt ). Aber den extremen FPS-Verlust beim anzeigen eines (mit OpenGL gezeichneten) Fensters ist immernoch da. Hmhm, das lag dann wohl nicht daran. Naja, mal schaun Dankeschön erstmal..
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.