Actionscript 3 ActionScript:将同一swf文件的多个实例添加到阶段
我正在使用FlashPunk游戏引擎和FlashDevelopSDK在ActionScript3.0中创建一个游戏。 我已经创建了自己的MovieClip类,该类接受预加载的电影剪辑文件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
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的地方发布代码。我感觉每次调用函数时都会覆盖对象。