Im Erstellen eines einfachen Fahrzeugs und Projektilsimulationsspiel in WPF mit C #. Ich muss eine konstante Bildrate haben (d. H. Ich muss wissen, wie viel ein Objekt mit einer bestimmten Geschwindigkeit in jedem Bild bewegt werden muss). Auf diese Weise konnte ich ein Ereignis abonnieren, das Positionen gemäß der Physik des Spiels berechnet und aktualisiert, und zwar auf CompositionTarget.Rendering Ereignis.
%Vor%Ich habe es eine Weile gegoogelt und keine Antwort gefunden. Die fps in WPF scheinen willkürlich zu sein und mit einer Stoppuhr zu wissen, wie viel Zeit dazwischen verstrichen ist ein Rahmen und der vorherige wäre überhaupt nicht sauber.
Ich dachte auch daran, meine eigene Bildrate zu erstellen, indem ich UpdatePositions alle paar Millisekunden anrufe und hoffe, dass das Rendering entsprechend stattfindet und eine flüssige Animation hat. Das scheint das Rad neu zu erfinden, und ich kann mir keinen Weg vorstellen, dies auf eine saubere und einfache Art und Weise umzusetzen.
Danke!
Es ist unmöglich, in WPF eine konstante Framerate zu erhalten. WPF basiert auf der Idee dynamischer Framerates und macht es nahezu nutzlos für jegliche Spieleentwicklung.
Einige verwandte Informationen:
Warum ist Frame Rate in WPF unregelmäßig und nicht begrenzt auf Monitor aktualisieren?
Wie andere darauf hingewiesen haben, ist die Lösung unglücklicherweise nicht die Verwendung von WPF für die Spieleentwicklung.
Ich habe intensiv mit WPF-Animationen gearbeitet und es ist ein absoluter Schmerz, etwas in WPF flüssig zu animieren (wenn Sie dies tun wollen, habe ich ein paar Best Practices hier).
Ich bin sicher, es gibt viele andere Gründe, warum WPF nicht gut für die Spieleentwicklung ist. Ein Beispiel dafür ist, dass Sie keine Vollbildanwendung in WPF erstellen können, da WPF-Anwendungen immer mit Fenstern versehen sind. Das bedeutet, dass du die Auflösung deines Spiels nicht ändern kannst, um es im Vollbildmodus flüssig zu machen, was bedeutet, dass du kein Vollbildspiel in WPF erstellen kannst und gute Ergebnisse erwartest.
Wenn Sie ernsthaft mit Ihrem Spiel oder der Entwicklung von Spielen im Allgemeinen und dies ist nicht nur ein Prototyp oder nur zum Spaß, dann empfehle ich, dass Sie WPF Graben und verwenden Sie etwas anderes, sonst Sie nur für Enttäuschung und Sub -par Qualität.
Auch wenn Sie nicht mit XNA für die Spieleentwicklung gehen wollen, lesen Sie, wie das Zeitmanagement dort abläuft - eine feste Bildrate ist nicht gleich oder erforderlich für eine stabile Spielzeit. Versuchen Sie, Ihre Physik auf Spielzeit zu basieren (die die gleiche sein kann wie Echtzeit oder basierend auf Echtzeit-Delatas berechnet - d. H. Wenn Sie den "Schnellvorlauf" -Modus oder das Spiel pausieren wollen) statt Bildrate.
Nach zwei Links diskutieren "Spielzeit", "Echtzeit" und verwandte Konzepte: Ссылка , Ссылка