Flash AS3多点触控事件处理程序

时间:2012-12-20 03:35:25

标签: actionscript-3 flash multi-touch

我在一个框架中有3个单独的影片剪辑,每个剪辑都可以使用简单的触摸和拖动事件在舞台上移动,如下所示,这与它有一些相关性。我想将三个剪辑中的每一个拖到第四个剪辑上,当所有3个剪辑都包含在第四个剪辑中时,我想要一个触发的事件来改变当前帧。在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 个答案:

答案 0 :(得分: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()使用一个简单的“边界框”来检测“碰撞”。这意味着它可以将命中注册为真,即使两个影片剪辑看起来不像他们实际上正在触摸。 Flash中的像素完美碰撞检测是可能的,但更复杂,值得自己发布。 A simple example of pixel perfect collision in AS3 can be found here