Как непрерывно выполнять действие, когда пользователь удерживает палец в 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).