2013-05-11 3 views
0

touchEvents에서는 멀티 터치를 처리합니다. 맞습니까? 따라서 한 번에 여러 손가락을 사용할 수 있습니다. 그렇다면 이벤트가 특정 양의 터치 만 처리하도록하려면 어떻게해야합니까? 예를 들어, 3 개의 사각형 만 드래그하면됩니다. (예, 내가하는 일이 아님)일정량의 touchPointIds 만 허용

답변

1

을 사용할 수 있습니다. 공식 문서에서 :

플래시 런타임은 터치의 각 지점 고유 touchPointID 값을 할당합니다.
...
전체 터치 시퀀스를 관리하려면 touchPointID 속성을 사용하십시오. 터치 시퀀스에는 하나의 touchBegin 이벤트, 0 개 이상의 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++; 
    } 
}