У меня есть ученик, который работает над игрой Tower Defense в AS3 и имеет проблему, которая меня тошнит. Он использует hitTestObject, чтобы изменить направление движения клипа. MovieClip имеет собственную временную шкалу с фреймами для разных направлений, с которыми сталкивается объект, и связанный файл .as с кодом для поведения объекта.AS3 gotoAndStop заставляет объект удалять себя
Когда он называет gotoAndStop, чтобы изменить внутренний фрейм movieClip, удаленное событие запускается, но объект остается на экране и больше не перемещается.
Все мои поиски находят ответы об удалении объектов, но я ничего не видел о предотвращении удаления объекта.
Следующий код представляет собой цикл инициируется событием ENTER_FRAME в файле .as класса для объекта MovieClip:
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, кадр из изменений мувиклип и затем код подскакивает непосредственно к функции, которая запускается событием REMOVED.
У кого-нибудь есть идея, почему это событие может быть вызвано событием REMOVED?
Благодарим за помощь.
спасибо. Изменение моего прослушивателя событий с удаленных до REMOVED_FROM_STAGE решило проблему. – wrTechTeacher