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同时触碰两个地方后移动。
PinchCompletePinch结束。

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

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

转载于:https://www.cnblogs.com/songtzu/archive/2012/04/18/2455360.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值