AS3: Как добавить дочерний элемент (экземпляр) на сцену каждый раз, когда я нажимаю кнопку, не заменяя существующие дочерние элементы?

Как добавить дочерний элемент (экземпляр) на сцену каждый раз, когда я нажимаю кнопку, не заменяя существующие дочерние элементы?

У меня есть четыре класса: Symbol1, Symbol3, Symbol4, все.

Когда я нажимаю кнопку Symbol3, я хочу создать экземпляр Symbol1 на сцене через класс all.as. С Symbol4 я хочу удалить один из созданных экземпляров в порядке создания на сцене. Пример: я трижды нажал Symbol3 и создал три экземпляра Symbol1 на сцене. Теперь, если я нажму Symbol4, я удалю первый созданный экземпляр. Если я нажму Symbol4 еще раз, я удалю второй созданный экземпляр.

    public class Symbol3 extends SimpleButton
{
    private var creator:all;
    private var child:Symbol1 = new Symbol1  ;
    private var child2:Symbol1 = new Symbol1  ;
    private var child3:Symbol222 = new Symbol222  ;

    public function Symbol3()
    {
        addEventListener(MouseEvent.CLICK, onCLICK);
    }

    private function onCLICK(s:MouseEvent)
    {
        creator = new all(child);
        stage.addChild(creator);
    }
}

.

    public class all extends MovieClip
{
    private var _thief1:MovieClip;

    public function all(par1:MovieClip)
    {
        _thief1 = par1;
        addEventListener(Event.ADDED_TO_STAGE, onADDED_TO_STAGE);
    }

    private function onADDED_TO_STAGE(e:Event)
    {
        removeEventListener(Event.ADDED_TO_STAGE, onADDED_TO_STAGE);
        this.addChild(_thief1);
        _thief1.x = Math.random() * 200;
        _thief1.y = Math.random() * 200;
    }
}

.

    public class Symbol4 extends SimpleButton
{
    public function Symbol4()
    {
        addEventListener(MouseEvent.CLICK, onCLICK);
    }

    private function onCLICK(s:MouseEvent)
    {
        stage.removeChild(?);
    }
}

Это у меня пока. Спасибо


person irnik    schedule 23.04.2013    source источник
comment
Попробуйте вернуть создателя значения, затем вызовите его (stage.removeChild (создатель)) и импортируйте файл.   -  person    schedule 24.04.2013
comment
Я бы посоветовал вам использовать осмысленные имена переменных, поскольку Symbol3 и Symbol4 довольно расплывчаты и делают ваш код загадочным. Как насчет CreateButton ? DeleteButton ? all также является расплывчатым выбором для имени класса.   -  person prototypical    schedule 24.04.2013
comment
Спасибо за Ваш ответ. Это просто пример, который я сделал быстро. Я буду признателен, если у вас есть идеи относительно логики. Спасибо   -  person irnik    schedule 24.04.2013


Ответы (2)


Вы должны поместить все ваши добавляемые/удаляемые спрайты в один и тот же контейнер, назовем его container. Тогда кнопка добавления будет выглядеть так:

private function onCLICK(s:MouseEvent)
{
    container.addChild(new all(new Symbol1()));
}

И кнопка удаления:

private function onCLICK(s:MouseEvent)
{
    container.removeChildAt(0);
}

При удалении дочернего элемента на слое 0 другие дочерние элементы опустятся на один слой ниже, а следующий удаляемый дочерний элемент появится на 0.

person Kodiak    schedule 24.04.2013
comment
Спасибо за этот ответ. Я понял вашу точку зрения, но я все еще не могу создать еще одного ребенка, не заменив существующего!? Каждый раз, когда я нажимаю кнопку, чтобы создать дочерний элемент, существующий исчезает. - person irnik; 24.04.2013
comment
Я в основном хочу, чтобы каждый раз, когда нажималась кнопка, на сцене появлялся новый ребенок. - person irnik; 24.04.2013
comment
Проблема в том, что вы не воссоздаете дочерний MovieClip (тогда называемый par1, затем _thief1). Я отредактировал свой ответ. - person Kodiak; 24.04.2013

Спасибо за помощь Кодиак!

Я сделал это наконец. Я не уверен, что это правильный подход, но, по крайней мере, он работает.

У меня есть три класса: AddChild2.as — связь с Button Creator.as Ship2.as — связь с MovieClip

Хитрость заключалась в том, что сцену нужно было передавать в качестве параметра, чтобы не было ошибки: 1009. Другая мысль — это пустая функция-конструктор Creator, которая делает код более гибким и независимым. Теперь Creator может создавать любой переданный мувиклип. Опять же, я считаю, что есть еще один лучший способ сделать это, поэтому любое улучшение приветствуется.


    public class AddChild2 extends SimpleButton
{
    private var creatorche:Creator = new Creator;
    private var s:Ship2;

    public function AddChild2()
    {
        // constructor code
        addEventListener(MouseEvent.CLICK, onCLICK)
    }

    private function onCLICK(e:MouseEvent)
    {
        s = new Ship2;
        creatorche.onCreator(s, stage);
    }
}

.

    public class Creator extends MovieClip
{
    private var ship:MovieClip;

    public function Creator()
    {
        // constructor code
    }

    public function onCreator(par1:MovieClip, par2:Stage)
    {
        ship = par1;
        par2.addChild(ship);
        ship.x = Math.random() * 200;
        ship.y = Math.random() * 200;
    }

}

.

    public class Ship2 extends MovieClip
{


    public function Ship2()
    {
        // constructor code
    }
}
person irnik    schedule 24.04.2013