Как непрерывно выполнять действие, когда пользователь удерживает палец в XNA

У меня есть действие, когда пользователь удерживает палец, но как мне непрерывно выполнять это действие, когда пользователь удерживает палец? Например, я хочу: moveRight += 10; непрерывно, пока пользователь удерживает палец на правой части экрана. Кто-нибудь знает, как это сделать в XNA?

2 ответа

Решение

Используйте API для ввода с помощью мыши (для простого ввода одним касанием в WP7), особенно проверьте:

MouseState ms = Mouse.GetState();
if(ms.LeftButton == ButtonState.Pressed && ms.X > centerOfScreen)
{
    DoSomething();
}

Или используйте API сенсорного ввода в WP7:

TouchCollection touches = TouchPanel.GetState();
foreach(TouchLocation touch in touches)
{
    if((touch.State == TouchLocationState.Pressed
            || touch.State == TouchLocationState.Moved)
            && touch.Position.X > centerOfScreen)
    {
        DoSomething();
        break;
    }
}

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

  • Установите это состояние в "true", когда вы получаете событие "hold"
  • Установите значение "false", когда вы получите событие, сообщающее, что событие "hold" окончено
  • Проверьте это логическое значение в цикле и увеличьте значение x (или скорость x), если оно установлено

Глядя на документацию по поддержке жестов для Windows Phone.

Может быть, ваше "релизное" событие, которое вы хотите обработать, ManipulationCompleted событие. Я не могу сказать, является ли он только Silverlight или Silverlight и XNA, хотя...

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

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

См. http://msdn.microsoft.com/en-us/library/ff607287(v=VS.95).aspx (возможно, класс Touch).

Другие вопросы по тегам