2

我在一帧中有 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);
    }
4

1 回答 1

2

将来,您希望实现一个解决方案,将您的拖放功能抽象到一个类中,但要使用您所拥有的,这是一个基本解决方案:

跟踪这三个何时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 中的像素完美碰撞检测是可能的,但更复杂,值得一文。 可以在此处找到 AS3 中像素完美碰撞的简单示例

于 2012-12-20T03:52:21.617 回答