Ich verwende C # / XNA und wurde einige Male angewiesen, Update-Code nicht mit Draw-Code zu mischen - und ich bin mir sicher, dass ich es nicht bin! Aber könnte jemand bitte beschreiben, was genau "Logikcode" ist?
Wie hier zu sehen: http://blogs.msdn.com/b/shawnhar/archive/2007/07/25/understanding-gametime.aspx
[...] stellen Sie sicher, dass Sie Ihre gesamte Spiellogik in die Update-Methode (nicht in Draw!) einfügen und alles mit einer schönen konstanten Geschwindigkeit läuft.
Ich frage dies, da die Geschwindigkeit meines Spiels relativ zur FPS schwankt. Langsame FPS entsprechen sich langsam bewegenden Objekten und umgekehrt. Und ja, ich füge den erwarteten position += speed * (float)gt.ElapsedGameTime.TotalSeconds;
Code ein.
Dies ist wahrscheinlich eine große Anfängerfrage, aber ich möchte nur die Definition dieser Frage absolut klarstellen.
gt.ElapsedGameTime.TotalSeconds
ist die Anzahl der Sekunden, die seit dem Starten des Programms (des Spiels) vergangen sind. Wenn Sie Ihre Geschwindigkeit damit multiplizieren, ist Ihre Geschwindigkeit nach 5 Sekunden fünfmal höher (mit Ausnahme des Sonderfalls, bei dem die Geschwindigkeit auf 0 gesetzt ist). Ich bin mir nicht sicher, was Sie sonst noch haben könnten, aber ich bin fasziniert.
iii
dass ich jedes Update manuell inkrementiere, weil ich es nicht in Sekunden will, ich will Schritte oder Frames. Ich kann jedoch erkennen, dass Ihr Weg ein gültiger Weg ist, um Dinge weich zu kodieren.
position = speed * ...TotalSeconds
. Beachten Sie, dass es=
nicht ist+=
. Wenn es+=
so wäre, wie Sie es eingegeben haben, würde Ihre Position fast augenblicklich vom Bildschirm verschwinden.