Постоянная частота кадров в WPF для игры

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

CompositionTarget.Rendering += UpdatePositions;

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

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

спасибо!

2 ответов


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

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

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

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

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

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

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

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


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

следующие 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