我有行动
MC1.addEventListener (MouseEvent.MOUSE_OVER, MC1_over);
可以使用其他MC代替鼠标吗? 换句话说,当MC2将超过MC1时,我的操作将开始。怎么样? 谢谢你的帮助
答案 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。
也许你知道哪里有问题?