2013-04-23 5 views
0

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

У меня есть четыре Классы: Символ1, Символ3, Символ4, все.

Когда я нажимаю 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(?); 
    } 
} 

Это я до сих пор. Спасибо

+0

Попробуйте вернуть создатель значения, затем вызовите его (stage.removeChild (создатель)) и импортируйте файл. – 2013-04-23 23:31:00

+0

Я бы посоветовал вам использовать имена переменных, которые имеют смысл, поскольку символы «Символ3» и «Символ4» довольно расплывчаты и делают ваш код загадочным. Как насчет 'CreateButton'? 'DeleteButton'? 'all' также является неопределенным выбором для имени класса. – prototypical

+0

Спасибо за ваш ответ. Это просто пример, который я сделал быстро.Буду признателен, если у вас есть идеи относительно логики. Спасибо – irnik

ответ

0

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

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

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

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

При удалении ребенка на слое 0, остальные дети будут идти один слой вниз и следующий ребенок убрать будет 0.

+0

Спасибо за этот ответ. Я получил вашу мысль, но я все еще не могу создать другого ребенка, не заменяя существующего !? Каждый раз, когда я нажимаю кнопку, чтобы создать ребенка, существующий исчезает. – irnik

+0

Я в основном хочу, чтобы каждый раз, когда нажимали кнопку, новый ребенок появлялся на сцене. – irnik

+0

Проблема в том, что вы не восстанавливаете «дочерний» MovieClip (затем называете par1, а затем называете _thief1). Я отредактировал свой ответ. – Kodiak

0

Спасибо за помощь Kodiak!

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

У меня есть три класса: AddChild2.as - связь с кнопкой Creator.as Ship2.as - связь с MovieClip

хитрый момент был, что этап должен был быть передан в качестве параметра, чтобы избежать ошибки : 1009. Другие считают пустую конструкторскую функцию Создателя, которая делает код более гибким и независимым. Теперь 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 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^