2012-12-20 42 views
1

我在一个框架中有3个单独的影片剪辑,每个剪辑可以使用简单的触摸和拖动事件(如下所示)在舞台上移动,因为它具有一定的相关性。我想将三个剪辑中的每一个拖到第四个剪辑上,当所有三个剪辑都包含在第四个剪辑中时,我想要一个触发事件来改变当前帧。在AS3中这样做的最简单方法是什么?任何例子都会很棒,因为我是一个完整的初学者。由于Flash AS3多点触控事件处理程序

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

    Gem1_MC.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler_2); 
    Gem1_MC.addEventListener(TouchEvent.TOUCH_END, fl_TouchEndHandler_2); 

    var fl_DragBounds_2:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); 

    function fl_TouchBeginHandler_2(event:TouchEvent):void 

{ 



event.target.startTouchDrag(event.touchPointID, false, fl_DragBounds_2); 
    } 

    function fl_TouchEndHandler_2(event:TouchEvent):void 
    { 
     event.target.stopTouchDrag(event.touchPointID); 
    } 

回答

1

将来你想实现一个解决方案,您的拖放功能被抽象成一个类,但与你有什么工作,这是一个基本的解决方案:

保持轨道时三个MovieClips被认为是“包含在”第四夹

var contained:Array = new Array(false, false, false); 

在一个对象完成它的阻力的情况下,查看其是否包含在mc1。在这些检查的结束,看看他们都是真实的:

function fl_TouchEndHandler_2(event:TouchEvent):void { 
    // Drag & drop stuff... 
    contained[2] = Gem2_MC.hitTestObject(Gem4_MC)); // where Gem4_MC is your 4th movie clip. 

    if (contained.indexOf(false) == -1) { // This returns -1 if it can't find false 
     gotoAndStop(frame_number_you_want); 
    } 
} 

作为一个侧面说明,hitTestObject()使用一个简单的“边框”,以dectect“碰撞”。这意味着即使两个电影剪辑看起来不像是真正触摸的,它也可能会将注释记录为真。在Flash中像素完美的碰撞检测是可能的,但更复杂,值得自己的职位。 A simple example of pixel perfect collision in AS3 can be found here

+0

感谢您的回复,但我已经有完整的多点触控拖放功能。 – user1051467

+0

@ user1051467重新编辑以更好地适合您的问题。 – Foggzie

+0

非常感谢,但我遇到了麻烦实现这一点,我收到一个错误,访问未定义的属性我和访问未定义的属性Gem4。有什么建议么 ? – user1051467