只允许一定数量的touchPointIds

时间:2013-05-11 23:38:00

标签: actionscript-3 flash actionscript actionscript-2

在touchEvents中,它们处理多种触摸,对吧?所以你可以一次使用多个手指。那么我如何才允许事件处理一定量的触摸?例如,只拖3个方格,而不是全部5个方格? (例子,不是我在做什么)

1 个答案:

答案 0 :(得分: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++;
  }
}