我有一个学生正在开发 AS3 中的塔防游戏,并且遇到了一个困扰我的问题。他正在使用 hitTestObject 来改变movieClip 移动的方向。影片剪辑有自己的时间线,其中包含对象所面对的不同方向的帧和一个链接的 .as 文件,其中包含对象行为的代码。
当他调用 gotoAndStop 改变movieClip的内部帧时,触发了removed事件,但是对象停留在屏幕上不再移动。
我的所有搜索都找到了有关删除对象的答案,但我没有看到任何有关防止对象删除自身的内容。
以下代码是由 .as 类文件中针对 movieClip 对象的 ENTER_FRAME 事件触发的循环:
private function eFrame(event:Event):void
{
if (_root.isPaused == false)
{
//MOVING THE ENEMY
this.x += speed * xDir;
this.y -= speed * yDir;
if (health <= 0)
{
_root.currency += 4;
this.parent.removeChild(this);
}
if (this.x > 770)
{
this.parent.removeChild(this);
_root.health -= 10;
_root.gotHit = true;
}
//checking if touching any invisible markers
for (var i:int=0; i<_root.upHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var upMarker:DisplayObject = _root.upHolder.getChildAt(i);
if (hitTestObject(upMarker))
{
yDir = 1;
xDir = 0;
this.gotoAndStop(3);
}
}
for (i=0; i<_root.downHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var downMarker:DisplayObject = _root.downHolder.getChildAt(i);
if (hitTestObject(downMarker))
{
yDir = -1;
xDir = 0;
this.gotoAndStop(7);
}
}
for (i=0; i<_root.rightHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var rightMarker:DisplayObject = _root.rightHolder.getChildAt(i);
if (hitTestObject(rightMarker))
{
yDir = 0;
xDir = 1;
this.gotoAndStop(6);
}
}
for (i=0; i<_root.leftHolder.numChildren; i++)
{
//the process is very similar to the main guy's testing with other elements
var leftMarker:DisplayObject = _root.leftHolder.getChildAt(i);
if (hitTestObject(leftMarker))
{
yDir = 0;
xDir = -1;
this.gotoAndStop(2);
}
}
}
}
private function remove(event:Event):void
{
trace("remove");
removeEventListener(Event.ENTER_FRAME, eFrame);
_root.enemiesLeft -= 1;
}
}
当 gotoAndStop 行执行时,movieClip 的帧发生变化,然后代码直接跳转到由 REMOVED 事件触发的函数。
有谁知道为什么这个代码可能会触发 REMOVED 事件?
感谢您的帮助。