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