0

在 touchEvents 中,它们处理多点触摸,对吗?因此,您可以一次使用多个手指。那么我如何只允许事件处理一定数量的触摸呢?例如,只拖动 3 个方块,而不是全部 5 个?(例如,不是我在做什么)

4

1 回答 1

1

在 AS3 中,您可以使用TouchEvent.touchPointID. 来自官方文档:

Flash 运行时为每个触摸点分配一个唯一touchPointID 值。
...
使用该touchPointID属性来管理整个触摸序列。一个触摸序列有一个touchBegin事件、零个或多个touchMove事件以及一个touchEnd事件,它们都具有相同的touchPointID值。

基本上,您应该只跟踪您感兴趣的触摸序列(例如:同时只有 3 个不同的触摸)。因此,您可以使用索引来存储这些 id,并让您的触摸处理程序对其进行检查,以便跳过特定的序列。

一些快速的草图代码:

// allocate a counter and a dictionary to be used as a whitelist and
var sequencesLeft : int = 3;
var currSequences : Dictionary = new Dictionary();

...

mySprite..addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
mySprite..addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
mySprite..addEventListener(TouchEvent.TOUCH_END, onTouchEnd);

...

function trackSequence(event:TouchEvent, add : Boolean = false) : Boolean {
  if( add && counter == 0 )
    return false;

  var val : String = currSequence[ event.touchPointID ];
  if( add && !val ) {
    currSequences[ event.touchPointID ] = "" + counter--;
    return true;
  }

  return val != null;
}

function onTouchBegin(event:TouchEvent) {
  trackSequence( event, true );
}

function onTouchMove(event:TouchEvent) {
  if( !trackSequence( event ) )
    return;
  else {
    /* do whatever you want */
  }
}

function onTouchEnd(event:TouchEvent) {
  if( trackSequence( event ) ) {
    delete currSequences[ event.touchPointID ];
    counter++;
  }
}
于 2013-05-12T02:59:55.063 回答