我在一个帧中有 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);
}
最佳答案
将来,您希望实现一个解决方案,将拖放功能抽象为一个类,但为了使用您所拥有的功能,这里有一个基本解决方案:
跟踪三个 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 .
关于actionscript-3 - Flash AS3 多点触摸事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964899/