Actionscript 3 ActionScript:将同一swf文件的多个实例添加到阶段

Actionscript 3 ActionScript:将同一swf文件的多个实例添加到阶段,actionscript-3,flash,movieclip,flashdevelop,Actionscript 3,Flash,Movieclip,Flashdevelop,我正在使用FlashPunk游戏引擎和FlashDevelopSDK在ActionScript3.0中创建一个游戏。 我已经创建了自己的MovieClip类,该类接受预加载的电影剪辑文件 public function MyMovieClip(file:MovieClip, posX:int, posY:int, frameRate:int) { movieClip = file; movieClip.x = posX; movieCli

我正在使用FlashPunk游戏引擎和FlashDevelopSDK在ActionScript3.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类实例时,只渲染最后一个实例,并为我拥有的每个类实例进行更新。(例如,MyMovieClip的3个实例,最后一个实例以3倍的速度更新。)


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

您可能有多个
MyMovieClip
的实例,但是您正在添加到后台的
文件:MovieClip
有什么用呢。如果这始终是MovieClip的同一个实例,那么无论您实例化
MyMovieClip
类的频率如何,您都会得到这个结果,因为您要将同一个实例多次添加到stage中


您可能需要多次加载“预加载的片段”,或者,如果您能够(您知道类名等),则可以从加载的片段中使用
getDefinitionByName()
创建所需类的新实例,并附加此新实例。

您可以通过以下操作创建相同加载swf的新实例:

  // re-use a loaded swf
  var bytes:ByteArray = existingLoader.content.loaderInfo.bytes;
  var loader:Loader = new Loader();
  loader.loadBytes(bytes);
其中existingLoader是用于首先加载swf的加载程序

loadBytes
一起使用的加载程序将发送另一个
COMPLETE
事件,因此,当您为此创建侦听器时,可以使用“克隆”版本:

  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFClonedComplete);

是的,你说得对。然后如何加载这个swf,以便可以多次使用它。目前,我正在将我所有的SWF作为MovieClips加载到字典中。我不想每次制作电影剪辑时都要重新加载swf。几秒钟前我已经编辑了我的帖子。你必须知道加载剪辑中的类定义。我是Actionscript的新手,你有没有可能解释一下你提到的getDefinitionByName()方法。看一看,我不知道这对我有什么帮助。有了它,我可以为我选择的类对象创建一个新实例,但是如何在没有与以前相同的问题的情况下附加我的swf呢?如果我没有访问现有加载程序的权限该怎么办?我已经使用了我的代码,这样我就可以访问我现有的加载程序,而您的示例也可以工作。我不确定这是我想做的,因为我不想再做了。从现有加载程序加载字节比创建新加载程序快得多。我尝试执行movieClip=existingLoader.content,因为加载程序包含movieClip对象,但我遇到以下错误:错误:使用静态类型flash隐式强制值。显示:DisplayObject到可能不相关的类型flash。显示:movieClip.you必须强制转换到
movieClip=existingLoader.content作为movieClip
。确定吗工作,但不是我想的那样。还是给了我同样的问题。看来我得重新加载你第一次提到的字节了。谢谢你的帮助。在你调用实例化和调用MyMovieClip的地方发布代码。我感觉每次调用函数时都会覆盖对象。