Как непрерывно выполнять действие, когда пользователь удерживает палец в XNA - PullRequest
2 голосов
/ 05 июля 2011

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

Ответы [ 2 ]

4 голосов
/ 05 июля 2011

Используйте либо 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;
    }
}
1 голос
/ 05 июля 2011

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

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

Просмотр Документы для поддержки жестов для Windows Phone .

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

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

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

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

...