ActionScript 3, как удалить экземпляр со сцены

Итак, у меня есть два мувиклипа, sRP_mc и dP_mc, на первом кадре. Теперь, когда щелкнут любой из мувиклипов, я хочу, чтобы мувиклип был удален со сцены, а затем я хочу, чтобы кадр изменился (я хочу, чтобы фильм перешел к кадру 5). В кадре 5 есть кнопка закрытия, при нажатии на которую вы возвращаетесь к кадру 1 (но когда она возвращает вас к кадру 1, я хочу, чтобы фрагмента ролика, на который был нажат, больше не было). Вот мой код для моего первого кадра (кадр 1).

import flash.events.MouseEvent;
stop();
if (sRP_mc.visible == true) {
    sRP_mc.addEventListener(MouseEvent.CLICK, sRPClicked);
    function sRPClicked(event:MouseEvent):void {
        sRP_mc.removeEventListener(MouseEvent.CLICK, sRPClicked);
        removeChild(sRP_mc);
        gotoAndPlay(5);
    }
}

if (dP_mc.visible == true) {
    dP_mc.addEventListener(MouseEvent.CLICK, dPClicked);
    function dPClicked(event:MouseEvent):void {
        dP_mc.removeEventListener(MouseEvent.CLICK, dPClicked);
        removeChild(dP_mc);
        gotoAndPlay(10);
    }
}

а на кадре 5 есть кнопка закрытия и код такой.

import flash.events.MouseEvent;
stop();
close_btn.addEventListener(MouseEvent.CLICK, closeScreen);
function closeScreen(event:MouseEvent):void {
    gotoAndStop(1);
}

а на 10 кадре тоже есть кнопка закрытия код вот такой.

import flash.events.MouseEvent;
stop();
close_btn.addEventListener(MouseEvent.CLICK, closeScreen2);
function closeScreen2(event:MouseEvent):void {
    gotoAndStop(1);
}

Как видите, если sRP_mc или dP_mc удалить с помощью метода removeChild, то sRP_mc и dP_mc не должны быть видны (.visible != true), но когда я играю в это, он говорит, что sRP_mc и dP_mc всегда видны, а дочерний элемент делает не удалиться полностью со сцены (или я думаю, что исчезновение продолжает возвращаться всякий раз, когда я возвращаюсь к кадру 1). Почему это происходит и как мне это исправить?


person SilentDev    schedule 23.09.2013    source источник
comment
у вас есть некоторые фундаментальные проблемы с синтаксисом вашего кода (например, определения функций внутри операторов if). Предполагая, что вы используете Flash Pro, выберите «Строгий режим» в настройках ActionScript, и Flash Pro покажет вам все ошибки.   -  person    schedule 23.09.2013


Ответы (1)


Когда объект удаляется со сцены, свойство visible не изменяется на false, если только вы не сделаете это вручную. Вот лучший способ проверить, не находится ли элемент на сцене (я также очистил вашу встроенную функцию):

if (sRP_mc.stage != null) {
    sRP_mc.addEventListener(MouseEvent.CLICK, sRPClicked);
}

function sRPClicked(event:MouseEvent):void {
    sRP_mc.removeEventListener(MouseEvent.CLICK, sRPClicked);
    removeChild(sRP_mc);
    gotoAndPlay(5);
}

Если объект удаляется со сцены, его свойству stage присваивается значение null. Надеюсь, это поможет!

person onekidney    schedule 23.09.2013
comment
Хм, ладно, все равно не работает. Я добавил оператор трассировки после оператора removeChild, и он действительно отслеживает, поэтому он удаляет дочерний элемент, но когда он переходит к кадру 5, а затем после того, как до нажатия кнопки «закрыть» и возвращается к кадру 1, появляется мувиклип назад по какой-то причине. Это потому, что я фактически поместил мувиклип на сцену в кадре 1 и не использовал addChild? - person SilentDev; 24.09.2013