PDA

Просмотр полной версии : Как реализовать взрыв и удаления корабля?


DeNCHiK01
29.02.2012, 21:38
Добрый вечер! Я создаю игру на Flash. Мне нужно, чтобы при попадании в корабль проигрывалась анимация взрыва, а затем он удалялся со сцены. Я пытаюсь это сделать так:
Вставил в класс корабля

static public const REMOVE_ME:String = "removeMe"

В последний кадр анимации взрыва корабля:


import flash.events.Event
dispatchEvent(new Event(REMOVE_ME, true));


В классе игры:

public function moveBullets():void
{
for (var i2:int; i2 < enemyArr.length; i2++ )
{
if (enemyArr[i2].health <= 0)
{

enemyArr[i2].gotoAndPlay("boom")



addEventListener(enemyArr[i2].REMOVE_ME, removeMe);




if (enemyArr.length == 0)
{
nextLevel();

}
}
}

}
private function removeMe():void
{
removeChild(enemyArr[i2])
enemyArr.splice(i2, 1)
}


Я немного запутался и не понял, что именно должна принимать removeMe в моем случае, но мне нужно унаследовать i2. И при компиляции выдает: Error #1069: Не удалось найти свойство REMOVE_ME в AS.Game.Enemies.EnemyEasy; отсутствует значение по умолчанию, хотя вроде REMOVE_ME в этом классе есть. Подскажите, пожалуйста, как это можно исправить?

Zebestov
29.02.2012, 22:02
Несколько исправлений.


dispatchEvent(new Event(EnemyEasy.REMOVE_ME, true));



enemyArr[i2].addEventListener(EnemyEasy.REMOVE_ME, removeMe);



private function removeMe(event:Event):void
{
var target:EnemyEasy = event.target as EnemyEasy;
var index:int = enemyArr.indexOf(target);
if (contains(target)) removeChild(target);
enemyArr.splice(index, 1);
}


На будущее рекомендую указывать название класса, которому принадлежит участок кода.

DeNCHiK01
29.02.2012, 22:09
Спасибо за помощь, но выдал 1180: Вызов предположительно неопределенного метода contents.

Участок кода принадлежит классу EnemyEasy

dimarik
29.02.2012, 22:35
if (/*здесь была опечатка*/contains(target))
removeChild(target);

Но как мы знаем, contains определит всех детей, внуков, правнуков и пр. Идеологически не совсем верно так удалять.
Заменим.
if (target.parent === this)
removeChild(target);

DeNCHiK01
29.02.2012, 23:08
Спасибо, все получилось!

Zebestov
01.03.2012, 01:07
dimarik, совершенно верно. Опечатку исправил, с замечанием согласен.
DeNCHiK01, приношу извинения за опечатку )