我有一个名为MC的影片剪辑,它有两层。第二层有5帧,第一层只有一个从第1帧到第5帧的名为item
的影片剪辑。
然后,在我的代码中,我创建了一个名为MovieClip
的新soulItem
,并将item
添加到soulItem
,然后将soulItem
添加到{ {1}}。然后,MC
已从其父级item
)中删除。
然后,当MC
转到第2帧时发生了错误。有一个新的MC
实例,其父级为item
,并且不等于MC
在item
。屏幕上显示两个,soulItem
添加了1。
代码如下:
numChildren
我解决了这个问题如下:
public function FiveElementBall(MC:MovieClip) {
var soulItem:MovieClip = new MovieClip();
var item:MovieClip = MC.getChildByName('item') as MovieClip;
MC.addChild(soulItem);
}
private function update():void {
MC.gotoAndStop(2);
}
当新项目实例发生时(帧更改时)我再次处理并初始化private function update():void {
if(MC.getChildByName('item') != null) {
dispose(soulItem);
var soulItem:MovieClip = new MovieClip();
var item:MovieClip = MC.getChildByName('item') as MovieClip;
soulItem.addChild(item);//Then, item was removed from MC's Children.
MC.addChild(soulItem);
}
MC.gotoAndStop(2);
}
。然后它是正确的。
但我想知道我猜对了,为什么会这样?
我可以解决此问题soulItem
item
当它是MC
的孩子,因为MC
是正确的,唯一的错误是{{1} (在一个框架中,其父级为空,也不是soulItem
或a new instance of item
,在其他框架中,其父级为soulItem
)。
答案 0 :(得分:1)
但我想知道我猜对了,为什么会这样?
关键帧的重要性在哪里。当播放头移动到放置实例的关键帧时,如果它已经存在,它将创建一个新实例。
例如,假设MC
中的关键帧如下所示:
在这种情况下,item
在第1帧上有一个关键帧,它跨越5帧。这不会导致您描述的行为:您可以重新父item
并转到第2帧,而新的item
实例将不创建。
但是,如果您返回第1帧(前gotoAndStop(1)
或prevFrame()
),则播放器会点击放置 item
实例的关键帧,如果在那里找不到实例,将创建一个你描述的新实例。
将关键帧视为玩家期望在该帧存在的内容的描述。您可以在关键帧之间更改,但是当播放器到达关键帧时,它将重新评估显示器是否具有该关键帧所描述的所有内容,如果不是,则进行此操作。无法通过代码更改关键帧。您可以做的最好的事情是避免将播放头移动到放置您想要修改的实例的关键帧;例如,不要再回到第1帧。
出于这个原因,如果您有多个帧,那么通常使用代码移动时间轴实例并不是一个好主意。最好通过代码或所有关键帧来完成所有操作。
例如,不要在时间轴中使用item
实例,只需导出符号(例如Item
)并按代码创建:
public function FiveElementBall(MC:MovieClip) {
var soulItem:MovieClip = new MovieClip();
var item:Item = new Item();
soulItem.addChild(item);
MC.addChild(soulItem);
}