WP7 XNA触控与手势--来源:http://www.dotblogs.com.tw/help/archive/2010/12/14/20113.aspx

在手机上玩游戏,最一般的控制方式就是触控萤幕了!

  WP7的触控萤幕最少支援同时四点触控,在XNA裡,取得输入的方式都很相像,取得触控资讯的方法是由TouchPanel物件管理,用Touch..GetState()取得TouchCollection结构,因为至少支援四点触控,所以式取得触控的集合。

  TouchCollection裡存放的是TouchLocation结构,他有叁个重要成员,Id表示第几个触碰点,Position表示触碰位置,State表示触碰状态。

  状态有四种

 

Invalid 出现错误
Moved 移动
Pressed 新的点被压下
Released 释放

  根据游戏性质决定需要用到几个点,程式码可能的样子如下

1: TouchCollection touchCollection = TouchPanel.GetState();
2: if (touchCollection.Count > 0) {
3: if (touchCollection[0].State == TouchLocationState.Pressed) {
4: ...
5: }
6: }

  而有触控就会出现所谓的手势。

  手势是指藉由触控方式的不同而达成的特殊按法。

  WP7的手势有以下几种

 

Tap 触碰萤幕后放开,期间没有发生移动。
DoubleTap 快速触碰萤幕同一点两下。
Hold 点住萤幕不放。
VerticalDrag 垂直拖曳,点住萤幕后上下移动。
HorizontalDrag 水平拖曳,点住萤幕后左右移动。
FreeDrag 自由拖曳,点住萤幕后随意移动。
DragComplete 拖曳结束。
Flick 感觉像是轻弹萤幕。
Pinch 同时触碰两个地方后移动。
PinchComplete Pinch结束。

  取用的方式都相同,範例如下

1: while (TouchPanel.IsGestureAvailable) {
2: GestureSample gs = TouchPanel.ReadGesture();
3: if (gs.GestureType == GestureType.Tap) {
4: //做你想做的事...
5: }
6: }

  迴圈的用意是因为可能会有多个手势被触发,产生的手势会被存起来,藉由IsGestureAvailable来得知有没有手势可以取得。

  而因为手势的判断必须特别处理,不是直接读就有的,必须先开启手势判断的功能,

  在程式裡加入以下程式码

1: TouchPanel.EnabledGestures = GestureType.Hold |
2: GestureType.Tap |
3: GestureType.DoubleTap |
4: GestureType.FreeDrag |
5: GestureType.Flick |
6: GestureType.Pinch;

  这是把所有可以判断的手势都加入,因为判断手势会比较耗效能,所以尽可能地加入必要的就好。

  而DragComplete 和PinchComplete 是结束时的状态,不必加入。

本文来自help的博客,原文地址:http://www.dotblogs.com.tw/help/archive/2010/12/14/20113.aspx

你可能感兴趣的:(Blog)