Удалить кнопку из Stage Flash AS3

В настоящее время у меня есть несколько видеоклипов и кнопок на сцене, которые выполняют разные функции. У меня есть одна кнопка, которая "Атакует" вражеского игрока и уменьшает его ХП. У этой кнопки есть прослушиватель событий для щелчка, и когда он активируется, он проходит через оператор IF и меняет его полосу здоровья и т. Д. В зависимости от того, насколько низко его здоровье. Когда здоровье достигает 0, я хочу перевести весь экран на другой конечный экран.

Я попытался использовать .visible, чтобы сделать все мои другие объекты невидимыми, и это сработало, однако установка кнопки экземпляра, которую я нажимаю для атаки, как невидимую, не будет работать. Я также попробовал removeChild, который не удалит кнопку, а gotoAndPlay/Stop для будущего кадра дает мне нулевую ссылку на объект.

Вот код для этой конкретной кнопки в этом кадре.

stop();

OSButton.addEventListener(MouseEvent.CLICK, OSAttack);

function OSAttack(event:MouseEvent):void
{
    var health1:int = parseInt(RegHealth.text);
    health1 = health1 - 1000;


        if(health1 == 9000 || health1 == 8000 || health1 == 7000 || health1 == 6000 || health1 == 5000
       || health1 == 4000 || health1 == 3000 || health1 == 2000 || health1 == 1000 || health1 ==0){
        REGHPBAR.play();
    }


    RegHealth.text = health1.toString();


    if(health1 <= 0){
        ////// WHAT CODE DO I PUT HERE? 
    }


}

person user1858483    schedule 28.11.2012    source источник
comment
visible или removeChild должны работать. Если удаление объекта из списка отображения приводит к исключению ссылки null в более позднем кадре, он должен быть удален.   -  person Jason Sturges    schedule 28.11.2012
comment
как а? обратите внимание .. что 50 ors. если (здоровье1 › 0) { REGHBNAR.play(); } else { removeChild (thingyThatDied); }   -  person Jason Reeves    schedule 28.11.2012


Ответы (1)


Попробуйте использовать форматирование с начальными строчными буквами для имен переменных и функций и начальными прописными буквами для имен классов. Это обычная практика, которая облегчит чтение вашего кода.

При удалении кнопки вы также должны удалить слушателя. (ищите и читайте о слабых ссылках, поскольку вы можете начать использовать это).

Таким образом, ваш AS3 может выглядеть примерно так:

oSButton.addEventListener(MouseEvent.CLICK, oSAttack);

//or using weak referencing
//oSButton.addEventListener(MouseEvent.CLICK, oSAttack, false 0, true);

function oSAttack(event:MouseEvent):void
{
var health1:int = parseInt(regHealth.text);
health1 = health1 - 1000;

if(health1 == 9000 || health1 == 8000 || health1 == 7000 || health1 == 6000 || health1 == 5000 || health1 == 4000 || health1 == 3000 || health1 == 2000 || health1 == 1000 || health1 ==0){
REGHPBAR.play();
}


regHealth.text = health1.toString();

if(health1 <= 0){
////// remove the button
oSButton.removeEventListener(MouseEvent.CLICK, oSAttack);
oSButton.parent.removeChild(oSButton);

//if you no longer need the button you can null it
oSButton = null;
}

}
person crooksy88    schedule 28.11.2012