我真的在这个小问题上尽了最大努力,经过了2个星期的漫长夜晚,我知道你们中有一位经验丰富的AS3开发人员会在一两分钟内解决这个问题,我希望。
所以我有一个非常简单的游戏,你可以通过MOUSEUP轻松播放动画,然后点击主题并制作另一个动画(splat或其他东西)。仅在影片剪辑内的一帧上使用hitTest。 (这很好)
我在删除所述eventListener时遇到问题,我尝试在动画结束时删除它,所以在动画的最后一个上会有AS从舞台上说removeEventListener,但这不起作用,所以我尝试了removeEventListener在动画中将动画添加到舞台后,仍然没有快乐。
我希望它很简单 - this.removeEventListener或currentTarget,但是没有。
我真的想不出别的什么,
对于AS的爱,请帮忙。 一个解释也很神奇我理解人们没有时间,所以任何输入都会受到高度赞赏。以下是我的AS,如果有人想看到FLA,我可以发送它,我很乐意分享。
请注意,我可能非常明显我是新手所以请在途中帮助我......
import flash.display.MovieClip;
import flash.events.*;
var test:dart = new dart();
addChild(test);
circle.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);
function fl_ClickToDrag(event:MouseEvent):void
{
circle.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);
function fl_ReleaseToDrop(event:MouseEvent):void
{
circle.stopDrag();
addEventListener(Event.ENTER_FRAME, checkIfHitTest);
function checkIfHitTest(Event)
{
if (circle.hitTestObject(square))
{
trace("true, the circle and square are colliding");
var s:blood_splat = new blood_splat();
addChild(s);
s.x = mouseX;
s.y = mouseY;
**removeEventListener(Event.ENTER_FRAME,checkIfHitTest);**
}
else
{
trace("false, the circle and square are not colliding");
var s:blood_splat = new blood_splat();
addChild(s);
s.x = mouseX;
s.y = mouseY;
s.alpha = 0.1;
**removeEventListener(Event.ENTER_FRAME,checkIfHitTest);**
}
}
}
答案 0 :(得分:1)
只是这样做:
Event.currentTarget.removeEventListener(Event.type, checkIfHitTest)
答案 1 :(得分:1)
尝试在fl_ReleaseToDrop之外定义checkIfHitTest。从理论上讲,你所做的应该是有效的,因为你的removeEventListener代码也在fl_ReleaseToDrop的闭包中运行,但它的定义可能被忽略,因为你不应该在其他函数中定义命名函数。 / p>
另一个可能的问题是你给checkIfHitTest提供了与Class,Event相同的名称,因此你的定义有冲突 - 你的事件实例没有constance ENTER_FRAME。
老实说,即使你明显关闭了严格的模式,或者你会看到大量的编译错误,我无法想象你没有得到运行时错误。你有安装调试播放器吗?你真的应该重新打开严格的打字 - 它会给你反馈,至少可以自己解决很多这些问题。