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