ActionScript:将同一swf文件的多个实例添加到舞台

时间:2011-06-06 10:58:40

标签: actionscript-3 flash movieclip flashdevelop

我正在使用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倍更新。)

如果需要更多信息,我很乐意提供。

2 个答案:

答案 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()创建所需类的新实例并附上这个新实例。