Постоянная частота кадров в WPF для игры - PullRequest
9 голосов
/ 12 октября 2011

Я создаю простую игру-симулятор транспортных средств и снарядов в WPF с использованием C #. Мне нужно иметь постоянную частоту кадров (т. Е. Мне нужно знать, сколько нужно перемещать объект с определенной скоростью в каждом кадре). Таким образом, я мог подписать событие, которое вычисляет и обновляет позиции в соответствии с физикой игры, на событие CompositionTarget.Rendering .

CompositionTarget.Rendering += UpdatePositions;

Я немного погуглил и не нашел ответа. Частота кадров в WPF кажется произвольной , и использование секундомера, чтобы узнать, сколько времени прошло между кадром и предыдущим, не будет чистым вообще.

Я также думал о создании собственной частоты кадров, вызывая UpdatePositions каждые несколько миллисекунд и надеясь, что рендеринг произойдет соответствующим образом и будет иметь плавную анимацию. Это похоже на переизобретение колеса, и я не могу придумать, как реализовать это просто и понятно.

Спасибо!

Ответы [ 2 ]

8 голосов
/ 12 октября 2011

Невозможно получить постоянную частоту кадров в WPF.WPF основан на идее динамической частоты кадров, что делает его практически бесполезным для любой разработки игр.

Некоторая связанная с этим информация:

Почему частота кадров в WPF нерегулярна и не ограниченаДля мониторинга обновления?

http://rhnatiuk.wordpress.com/2008/12/21/wpf-video-playback-problems/

Как уже отмечали другие, к сожалению, решение состоит в том, чтобы не использовать WPF для разработки игр.

Я работалс WPF-анимацией, и абсолютно непросто получить что-нибудь для плавной анимации в WPF (если вы действительно хотите это сделать, я записал несколько лучших практик здесь).

Я уверен, что есть много других причин, почему WPF не подходит для разработки игр.Одним из примеров является то, что вы не можете создать полноэкранное приложение в WPF, так как приложения WPF всегда работают с окнами.Это означает, что вы не можете изменить разрешение своей игры, чтобы оно было плавным на полном экране, что фактически означает, что вы не можете создать полноэкранную игру в WPF и ожидать хороших результатов.

Если вы серьезно относитесь кигра или разработка игры в целом, и это не просто прототип или просто для удовольствия, тогда я рекомендую вам отказаться от WPF и использовать что-то еще, в противном случае вы просто настроите себя на разочарование и качество ниже номинала.

2 голосов
/ 12 октября 2011

Даже если вы не хотите использовать XNA для разработки игр, попробуйте прочитать о том, как осуществляется управление временем - фиксированная частота кадров не обязательно равна или не требуется для стабильного игрового времени. Постарайтесь основывать свою физику на игровом времени (которое может совпадать с реальным временем или вычисляться на основе данных реального времени - то есть, если вы хотите использовать режим «ускоренной перемотки вперед» или приостановить игру) вместо частоты кадров.

Следующие 2 ссылки обсуждают "игровое время", "реальное время" и связанные с ними понятия: http://blogs.msdn.com/shawnhar/archive/2007/07/25/understanding-gametime.aspx, http://blogs.msdn.com/shawnhar/archive/2007/11/23/game-timing-in-xna-game-studio-2-0.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...