Согласно этому обсуждению на форуме XBox Live Indie Games , по-видимому, на некоторых процессорах (и ОС) XNA занимает 100% процессорного времени на одном ядре, когда значение по умолчанию Game.IsFixedTimeStep
используется .
A общее решение (которое также сработало для меня) - добавить в ваш конструктор Game
следующее:
IsFixedTimeStep = false;
Что это значит?
Свойство Game.IsFixedTimeStep
, когда true
, гарантирует, что ваш кадр (Update()
, * 1024)*, ...) вызывается с фиксированным интервалом , указанным в Game.TargetElapsedTime
.По умолчанию это 60 вызовов в секунду .
Когда Game.IsFixedTimeStep = false
, вызовы следующего кадра будут происходить после завершения предыдущего.Это показано на графике времени ниже:
![enter image description here](https://i.stack.imgur.com/3cErZ.png)
Как это изменение повлияет на мой код?
Все вычисления с фиксированным временем ( движения, тайминги и т. Д.) Должны быть изменены, чтобы учитывать переменные временные шаги.К счастью, это очень просто .
Предположим, у вас есть
Vector3 velocity;
Vector3 position;
для какого-то объекта, и вы обновляете позицию с помощью
position += velocity;
По умолчанию это будет означать, что скорость вашего объекта составляет 60 * velocity.Length()
единиц в секунду.Вы добавляете скорость 60 раз в секунду.
Когда вы переводите это предложение в код, вы получаете простую модификацию :
position += velocity * 60 * gameTime.ElapsedGameTime.TotalSeconds;
Проще говоря: вы масштабируете добавленные значения в зависимости от того, сколько времени прошло .
Производя эти изменения в местах, где вы выполняете перемещение (или время и т. д.), вы обеспечитеигра действует так, как она вернулась, когда был установлен фиксированный временной шаг.