Главная » Разработка для Windows Phone 7 » Обработка жестов в XNA

0

Класс TouchPanel также включает возможности распознавания жестов, что демонстрирует проект XnaTapHello. В данном проекте используются те же поля, что и в XnaTouchHello, но несколько отличается метод LoadContent:

Проект XNA: XnaTapHello Файл: Game1.cs (фрагмент)

protected override void LoadContent() {

spriteBatch = new SpriteBatch(GraphicsDevice);

segoe36 = this.Content.Load<SpriteFont>("Segoe3 6"); textSize = segoe3 6.MeasureString(text);

Viewport viewport = this.GraphicsDevice.Viewport; textPosition = new Vector2((viewport.Width – textSize.X) / 2,

(viewport.Height – textSize.Y) / 2);

TouchPanel.EnabledGestures = GestureType.Tap;

}

Обратите внимание на последнее выражение. GestureType (Тип жеста) – это перечисление, элементами которого являются Tap (Касание), DoubleTap (Двойное касание), Flick (Скольжение), Hold (Удержание), Pinch[3] (Сведение), PinchComplete (Сведение завершенно), FreeDrag (Произвольное перетягивание), HorizontalDrag (Перетягивание по горизонтали), VerticalDrag (Перетягивание по вертикали) и DragComplete (Перетягивание завершено). Эти элементы определены как битовые флаги, таким образом, они могут комбинироваться с помощью побитового C#-оператора OR.

Метод Update совсем другой.

Проект XNA: XnaTapHello Файл: Game1.cs (фрагмент)

protected override void Update(GameTime gameTime) {

// Обеспечиваем возможность выхода из игры

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this .Exit();

while (TouchPanel.IsGestureAvailable) {

GestureSample gestureSample = TouchPanel.ReadGesture();

if (gestureSample.GestureType == GestureType.Tap) {

Vector2 touchPosition = gestureSample.Position;

if (touchPosition.X >= textPosition.X &&

touchPosition.X < textPosition.X + textSize.X && touchPosition.Y >= textPosition.Y && touchPosition.Y < textPosition.Y + textSize.Y)

{

textColor = new Color((byte)rand.Next(25 6), (byte)rand.Next(256), (byte)rand.Next(256));

}

else {

textColor = Color.White;

}

}

}

base.Update(gameTime);

}

Несмотря на то, что данное приложение рассматривает только один тип жеста, код довольно универсален. Если жест доступен, метод TouchPanel.ReadGesture (Прочитать жест) возвращает его как объект типа GestureSample (Пример жеста). Кроме применяемых здесь GestureType и Position, у этого объекта имеется еще свойство Delta (Приращение), обеспечивающее данные о перемещении в виде объекта Vector2. Для некоторых жестов (таких как Pinch)

GestureSample также предоставляет состояние второй точки касания через свойства Position2 и Delta2.

Метод Draw аналогичен используемому в предыдущем случае, но поведение данного приложения будет несколько иным. В предыдущей программе текст меняет цвет, когда палец касается экрана; во втором изменение цвета происходит, когда палец убирается с экрана. Средству распознавания жестов необходимо дождаться завершения жеста, чтобы определить его тип.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии