Динамическое добавление мувиклипа на сцену as3

У меня есть кнопки на сцене (run1_btn - run5-btn), которые при нажатии добавляют на сцену фрагмент ролика. (Рука) Этот фрагмент ролика содержит несколько кадров анимации. При нажатии кнопки мувиклип добавляется, но анимация уже завершена. Я думал, что когда mc будет добавлен на сцену, анимация начнется, но это не так. Кто-нибудь знает способ обойти это?

Вот мой код:

var handSlap:hand;
handSlap = new hand();

//event listeners
newPig.run1_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run2_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run3_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run4_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run5_btn.addEventListener(MouseEvent.CLICK, clickArea);




//functions
function clickArea(evtObj:MouseEvent):void
{
    trace(evtObj.target.name);
    addChild(handSlap);
    handSlap.x =200;
    handSlap.y=200;

}

2 ответа

Решение

Возможно более элегантный (зависит от вашей точки зрения), он гарантирует, что в любом контексте рука перезапустит анимацию временной шкалы, когда она будет добавлена ​​на сцену:

hand.addEventListener(Event.ADDED_TO_STAGE, onHandAddedToStage, false, 0, true);
function onHandAddedToStage(event:Event):void
{
    var mc:Movieclip = MovieClip(event.currentTarget);
    mc.gotoAndPlay(1);
}

Если вы не знакомы с моделью событий, бит "false, 0, true" просто гарантирует, что если вам когда-нибудь понадобится выгрузить руку, она не будет зацеплена слушателем события и останется в памяти, вероятно, вы не это не нужно, но это не вредит.

  var newPig:pig;
newPig = new pig();
addChild(newPig);
newPig.y=360;
newPig.x=350;

var handSlap:hand;
handSlap = new hand();

//event listeners
newPig.run1_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run2_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run3_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run4_btn.addEventListener(MouseEvent.CLICK, clickArea);
newPig.run5_btn.addEventListener(MouseEvent.CLICK, clickArea);

handSlap.addEventListener(Event.ADDED_TO_STAGE, onHandAddedToStage, false, 0, true);


//functions
function clickArea(evtObj:MouseEvent):void
{
    trace(evtObj.target.name);

    addChild(handSlap);
    handSlap.x =200;
    handSlap.y=200;


}

function onHandAddedToStage(event:Event):void
{
    var mc:MovieClip = MovieClip(event.currentTarget);
    mc.gotoAndPlay(1);
}
Другие вопросы по тегам