AS3。 MovieClip覆盖其他movieclip而不是mouse_over。

时间:2013-09-02 18:47:13

标签: actionscript-3 flash flash-cs5 flash-cs4

我有行动

MC1.addEventListener (MouseEvent.MOUSE_OVER, MC1_over);

可以使用其他MC代替鼠标吗? 换句话说,当MC2将超过MC1时,我的操作将开始。怎么样? 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

你必须检查交叉点。它被称为HitTesting,有几种方法可以解决这个问题。但首先 - 它不再是一个事件,你必须检查每一帧的交叉点。首先,我们需要创建一个新的Event.ENTER_FRAME监听器。

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void
{
    //Your code will go here
}

其次,我们检查我们的对象是否有他们的boudary矩形的交集。没有sqare或矩形的动画片段,如果你的MC更复杂(例如两个圆圈),你将不得不使用其他方式获得这个交集。

    addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void
{
    if(MC1.getRect(this).intersects(MC2.getRect(this)))
    {
        //Two movieclips are intersecting
    }
}

第三,只要你的MC相交,只要这个条件成立,我们需要定义一个标志,告诉我们我们是否已经做了我们想做的事情。

var alreadyHandled:Boolean = false;

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void
{
    if(MC1.getRect(this).intersects(MC2.getRect(this)))
    {
        if(!alreadyHandled)
        {
            doSomething();
            alreadyHandled = true;
        }
    }
    else
    {
        //When our movieclips are apart again, we reset our helping variable
        alreadyHandled = false;
    }
}

function doSomething():void
{
    //We do what we want to do if our MCs are intersecting
}

如果你想要连续做一些事情,当你的动画片段相交时,只需忽略那个帮助标记的东西。

顺便说一下,我建议你用小写字母开始命名你的变量。在AS3中,只有类和接口的名称以大写字母开头。

答案 1 :(得分:0)

谢谢。 当我在新的as3文件上执行此操作时,一切都很有效。 但我需要在课堂文档中使用它 当我使用

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void
{
    if(MC1.getRect(this).intersects(MC2.getRect(this)))
    {
        trace("intersects")
    }
}
  

Erron#1034:无法转换类型为global @ 23b3a0d1   flash.display.DisplayObject。

也许你知道哪里有问题?