我正在使用FlashPunk游戏引擎和FlashDevelop SDK在ActionScript 3.0中创建游戏。 我创建了自己的MovieClip类,它接受预加载的影片剪辑文件。
public function MyMovieClip(file:MovieClip, posX:int, posY:int, frameRate:int)
{
movieClip = file;
movieClip.x = posX;
movieClip.y = posY;
movieClip.stop();
FP.stage.addChild(movieClip);
timer = new Timer((1 / frameRate) * 1000);
timer.start();
timer.addEventListener(TimerEvent.TIMER, onTick);
}
我的影片剪辑的更新如下:
private function onTick(e:TimerEvent):void
{
if (isRepeating)
{
if (movieClip.currentFrame == movieClip.totalFrames )
{
movieClip.gotoAndStop(0);
}
}
movieClip.nextFrame();
}
我遇到的问题是,当我使用相同的swf文件有多个MyMovieClip类实例时,只渲染最后一个实例,并为我所拥有的类的每个实例更新。(例如3个实例) MyMovieClip,最后一个实例是速度的3倍更新。)
如果需要更多信息,我很乐意提供。
答案 0 :(得分:2)
您可以通过执行以下操作来创建相同加载的swf的新实例:
// re-use a loaded swf
var bytes:ByteArray = existingLoader.content.loaderInfo.bytes;
var loader:Loader = new Loader();
loader.loadBytes(bytes);
其中existingLoader是您用于首先加载swf的Loader。
与loadBytes
一起使用的Loader将发送另一个COMPLETE
事件,因此当您为其创建侦听器时,您可以使用“克隆”版本:
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFClonedComplete);
答案 1 :(得分:1)
您可能有MyMovieClip
的多个实例,但是您要添加到舞台的file:MovieClip
是什么。如果这始终与MovieClip的实例相同,那么无论您实例化MyMovieClip
类的频率如何,都会得到此结果,因为您要多次向舞台添加相同的实例。
您可能需要多次加载“预加载的剪辑”,或者,如果您能够(您知道类名等),请从加载的剪辑中使用getDefinitionByName()
创建所需类的新实例并附上这个新实例。