0

我有行动

MC1.addEventListener (MouseEvent.MOUSE_OVER, MC1_over);

可以使用其他 MC 代替鼠标吗?换句话说,当 MC2 超过 MC1 时,我的行动就会开始。怎么做?感谢帮助

4

2 回答 2

0

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

addEventListener(Event.ENTER_FRAME, onEnterFrame);

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

其次,我们检查我们的对象是否与它们的边界矩形相交。如果你有方形或矩形的影片剪辑,没关系,如果你的 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 中,只有类和接口的名称以大写字母开头。

于 2013-09-02T19:13:33.670 回答
0

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

addEventListener(Event.ENTER_FRAME, onEnterFrame);

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

错误#1034:无法在 flash.display.DisplayObject 上转换类型 global@23b3a0d1。

也许你知道问题出在哪里?

于 2013-09-03T07:33:17.003 回答