zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Vue.js+express建站
    单页应用(SPA)简介
    Z形记之CentOS7
    Z形记之比较两个目录下文件异同
    Z形记之Linux的那些事:安装Nginx
    SQL之修改字段类型
    Scrapy系列之爬取豆瓣电影
    Scrapy和MongoDB的应用---爬取
    BigDecimal类的常用算法
    回到顶部功能
  • 原文地址:https://www.cnblogs.com/songtzu/p/2455360.html
Copyright © 2011-2022 走看看