Динамическое добавление мувиклипа на сцену 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);
}