Очистить DisplayObject () без указания имени объекта - PullRequest
1 голос
/ 18 марта 2019

Я пытаюсь создать флэш-приложение, чтобы при нажатии первой кнопки функция displayObject отображала изображение.Когда нажата вторая кнопка, предыдущий держатель должен очистить весь объект внутри, и это та часть, в которой я застрял.Любое решение?

function showOppo (e:Event):void
{
    if(holder_1.stage)
    {
    holder_1 = new MovieClip();
    holder_2 = new MovieClip();
    holder_3 = new MovieClip();
    }
    holder_1.x = 37.6;
    holder_1.y = 133.05;
    holder_2.x = 458.55;
    holder_2.y = 133.05;

    Of9.scaleX = 1;
    Of9.scaleY = 1;
    Ofx.scaleX = 1;
    Ofx.scaleY = 1;

    holder_1.addChild(Of9);
    holder_2.addChild(Ofx);

    stage.addChild(holder_1);
    stage.addChild(holder_2);

    stage.setChildIndex(holder_1,1);
    stage.setChildIndex(holder_2,1);
}
function showsamsung (e:Event):void
{
    if(holder_1.stage)
    {
    holder_1 = new MovieClip();
    holder_2 = new MovieClip();
    holder_3 = new MovieClip();
    }
    holder_1.x = 37.6;
    holder_1.y = 133.05;
    holder_2.x = 458.55;
    holder_2.y = 133.05;

    Sgn9.scaleX = 1;
    Sgn9.scaleY = 1;
    Ss10.scaleX = 1;
    Ss10.scaleY = 1;

    holder_1.addChild(Sgn9);
    holder_2.addChild(Ss10);

    stage.addChild(holder_1);
    stage.addChild(holder_2);

    stage.setChildIndex(holder_1,1);
    stage.setChildIndex(holder_2,1);
}

Внутри кода я использую new MovieClip(), но когда 2-я кнопка нажата, и ничего не происходит.После нажатия 2-й кнопки я возвращаюсь и снова нажимаю 1-ю кнопку, отображается функция 2-й кнопки.

1 Ответ

2 голосов
/ 18 марта 2019

"Я пытаюсь выяснить, как удалить существующего дочернего элемента каждого держателя, поскольку, если нет, все эти изображения будут складываться вместе"

Да, когдавы addChild это все равно что сказать Флешу "paste this on a new layer inside the target".Каждый слой называется уровнем глубины.Вы можете получить доступ к определенному слою / глубине, используя getChildAt(x), где x - номер слоя (первый = 0, второй = 1, третий = 2 и т. Д.)

Пример:
Скажем, у вас есть один держатель ( например: holder_1) для показа всех изображений.

  • 1) В первый раз вы добавите создание изображения, используя holder_1.addChild(pic1);
    , поэтому теперь pic1 существует в (слое) уровне 0 внутри целиholder_1.

  • 2) Добавление второго изображения с holder_1.addChild(pic2);
    , так что теперь pic2 существует в (слое) уровне 1 внутри целиholder_1.

Теперь два изображения накладываются на разные слои внутри одного контейнера.Как исправить?Рассмотрим следующую логику:

holder_1.addChild(pic2); //add pic2 into holder (at level 0)
holder_1.removeChildAt(0); //remove anything at level 0 (...is pic2)
holder_1.addChild(pic1); //add different pic1 into holder (at level 0)

Ваш код может попробовать что-то вроде этого:

holder_1 = new MovieClip();
holder_2 = new MovieClip();
holder_3 = new MovieClip();

holder_1.x = 37.6;  holder_2.x = 458.55;

//# give multiple VARS the same value   
holder_1.y = holder_2.y = 133.05;

stage.addChild(holder_1);
stage.addChild(holder_2);

btnoppo.addEventListener(MouseEvent.CLICK,showOppo);
btnsamsung.addEventListener(MouseEvent.CLICK,showsamsung);

function showOppo (e:Event):void
{
    //# set multiple at once to value = 1
    Of9.scaleX = Of9.scaleY = Ofx.scaleX = Ofx.scaleY = 1;

    //# check if already has image & remove it
    if(holder_1.getChildAt(0) != null) { holder_1.removeChildAt(0); }
    if(holder_2.getChildAt(0) != null) { holder_2.removeChildAt(0); }

    holder_1.addChild(Of9); holder_2.addChild(Ofx);

}
function showsamsung (e:Event):void
{
    Sgn9.scaleX = Sgn9.scaleY = Ss10.scaleX = Ss10.scaleY = 1;

    //# check if already has image & remove it
    if(holder_1.getChildAt(0) != null) { holder_1.removeChildAt(0); }
    if(holder_2.getChildAt(0) != null) { holder_2.removeChildAt(0); }

    holder_1.addChild(Sgn9); holder_2.addChild(Ss10);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...