我在一个框架中有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);
}
答案 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