我必须将一个对象列表添加到一个数组中,以便我可以访问它们稍后,但由于某种原因我之前添加的对象,我将它们添加到显示列表中。这是代码:
添加列表的框架:
sunny.addEventListener(MouseEvent.CLICK, sunny_choice);
function sunny_choice(E:MouseEvent)
{
var sunny_walkcycle: Sunny_Walkcycle = new Sunny_Walkcycle ();
var sunny_busstop : Sunny_BusStop = new Sunny_BusStop ();
var sunny_opening: Teacher_Opening_Sunny = new Teacher_Opening_Sunny ();
clothingArray.push( sunny_walkcycle);
clothingArray.push( sunny_busstop);
clothingArray.push( sunny_opening);
trace("Sunny");
cleaner();
//cleaner just removes the event listener and asks it to go to the next frame
}
下一帧:
clothingArray [0].scaleX = -1;
addChild (clothingArray [0]);
clothingArray[0].x = 633;
clothingArray[0].y = 174;
clothingArray [0].stop ();
clothingArray [0].addEventListener (MouseEvent.CLICK, transforming);
function transforming (e:MouseEvent) {
if (clothingArray [0].currentFrame == clothingArray [0].totalFrames) {
clearall2 ();
}
else{
clothingArray [0].nextFrame();
moving_background.nextFrame ();
}
}
function clearall2 () {
clothingArray [0].removeEventListener (MouseEvent.CLICK, transforming);
removeChild (clothingArray [0]);
gotoAndStop (3);
}
有问题的一个:
addChild (clothingArray [1]);
clothingArray[1].addEventListener (Event.ENTER_FRAME , busstop);
trace ("The Current Frame is " + clothingArray [1].currentFrame);
function busstop (d:Event) {
if (clothingArray [1].currentFrame == clothingArray [1].totalFrames) {
clearall3 ();
}
}
function clearall3 () {
removeChild (clothingArray [1]);
clothingArray[1].removeEventListener (Event.ENTER_FRAME , busstop);
}
那么究竟是什么呢,第3帧中的movieclip在它被添加到Display列表之前就开始播放了,我不知道是什么导致它...我不能在这个帧上单独添加变量,因为还有其他选项在第1帧中导致我制作一个数组。
答案 0 :(得分:1)
假设Sunny_Walkcycle,Sunny_BusStop,Teacher_Opening_Sunny是MovieClip,为什么不在内存分配后直接使用stop()?
var sunny_walkcycle:Sunny_Walkcycle = new Sunny_Walkcycle ();
var sunny_busstop:Sunny_BusStop = new Sunny_BusStop ();
var sunny_opening:Teacher_Opening_Sunny = new Teacher_Opening_Sunny ();
sunny_walkcycle.stop();
sunny_busstop.stop();
sunny_opening.stop();
确保MovieClip内部框架中没有任何代码会破坏您的控制代码。 就像一个游戏()...隐藏在某个地方。
你也可以在推入数组后尝试(对于sunny_busstop):
clothingArray[1].stop();
或
clothingArray[1].gotoAndStop(1);
答案 1 :(得分:1)
是的,MovieClip会在创建后开始播放。它不需要添加到要激活的显示列表中。这是非常重要的细节,需要了解。
“显示列表”仅确定显示对象是否连接到舞台层次结构。
解决方案...在创建后调用stop()
方法,然后在将它们添加到显示列表时调用play()
方法。
如果从显示列表中删除时没有调用stop()
方法,它将继续消耗cpu周期。如果你有很多带有补间等的MovieClip,那可能非常重要。