Windows Phone 7, xna, как мне чаще пробовать сенсорный экран

хорошо, очевидно, что игры xna могут работать только со скоростью 30 кадров в секунду, что очень жаль, потому что наша игра на iphone выглядела намного лучше при 60 ...

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

даже если наша игра должна работать со скоростью 30 кадров в секунду, есть ли способ получить выборку с более высоким разрешением с сенсорного экрана? может через обратные вызовы? или путем доступа к списку сенсорных событий с отметками времени?


person matt    schedule 12.08.2010    source источник


Ответы (2)


Функция, которую вы ищете, это TouchPanel.GetState. Это просто вопрос вызова этой функции на частоте 60 Гц.

Чтобы получить 60 Гц, вы можете установить Game.TargetElapsedTime до 1/60 секунды. Это даст вам два обновления для каждого розыгрыша (согласно Шона Харгривза). опубликуйте здесь) при условии, что вы используете вертикальную синхронизацию со скоростью 30 кадров в секунду.

Если вы по-прежнему хотите, чтобы обновления состояния игры выполнялись со скоростью 30 кадров в секунду (просто выполняя сенсорный ввод со скоростью 60 кадров в секунду), вы можете поместить эти обновления в другой поток. Запустите обновление в этом потоке при первом вызове Game.Update и дождитесь его завершения при втором и так далее.

(Обратите внимание, что обычно ввод XNA должен выполняться в основном потоке (источник). Я предполагаю, что это относится к телефону и сенсорному вводу.)

В качестве альтернативы вы можете полностью заменить время класса Game (вызвав GraphicsDevice.Present самостоятельно). Это не просто сделать, но возможно. Для начала неплохо бы взглянуть на класс Game в Reflector.

(Отказ от ответственности: я еще не пробовал какую-либо настоящую разработку для телефона, поэтому могут быть некоторые проблемы, связанные с телефоном, о которых я не знаю.)

person Andrew Russell    schedule 12.08.2010

Частота дискретизации 30 кадров в секунду установлена ​​из соображений производительности.

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

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

person Matt Lacey    schedule 12.08.2010
comment
о, у нас есть, и проблема в том, что у нас есть след, который следует за прикосновением вокруг. и это все неровно на 30 кадрах в секунду, мы пока сгладили это с помощью сплайнов, но все еще кажется немного странным, что вы не можете сделать это ... вы можете сделать это на iphone 3G ... и я кухонные приборы, которые обладают большей вычислительной мощностью, чем это... черт... даже DS... - person matt; 12.08.2010
comment
Вы должны помнить, что ОС Windows не всегда будет работать на том же оборудовании, что и iPhone — будут доступны разные возможности. Также следует учитывать время автономной работы. - person Dave Carlile; 12.08.2010