繁体   English   中英

类实例中的AS3加载器

[英]AS3 loader within class instances

我正在设计一个小型游戏,并且正在为暴民对象创建类。 该类包含一些广泛的变量,这些变量对于创建该对象的多个实例很有用。 我想知道是否可以在类中使用加载程序,而不是在主类中使用加载程序来加载我正在编写的mob类的图像。

这样可以吗? 我看过一些关于拥有多个装载机的帖子,就像这样,但是这些帖子似乎都没有提到最有效的。 我之前在其他项目中已经做到这一点,但是没有任何基准测试或任何东西。

因此,有谁能告诉我这是否不是太耗费资源,以至于每个实例都不能使用它自己的加载器,然后在加载图像后将其设置为null? 该项目的范围是非常基本的,但是将来的项目将会很高兴知道。

- 编辑 -

我只是查看了graphics.copyfrom(source)并意识到这行不通。 甚至更多的研究使我惊讶地缺乏“影片剪辑克隆”。 另外,正如我担心的那样,当我尝试删除一个影片剪辑时,将多个影片剪辑指向加载程序内容也会全部删除。

遗憾的是,即使我最初的选择可能没有效果,但基本上这是唯一可以实现的方法。每个生物都有一个动画的swf Movieclip,因此我无法制作位图。 我也无法重用加载程序中的内容,因为如果指向多个影片剪辑,更改一个生物将导致其余影片剪辑的更改。 不幸的是,我现在要坚持使用具有自己的加载器的每个生物(使用后将其设置为null)并加载外部swf。 显然,在AS2中曾经有一种方法可以做到这一点,而且我不想在文档类中使用库符号。 所以,我被困住了。 感谢您提供的帮助,如果您能解决我的问题,请回发!

- 编辑 -

我认为代码片段也可能有用。 请记住,这些是载入20多个帧的swf。

public class Spawner {

        var mc:MovieClip;
        var loader:Loader;
        var refr:Stage;
        var x:Number,y:Number;
        var loaded:Boolean = false;

        public function Spawner(ref:Stage, type:String, inx:Number, iny:Number) {
            refr = ref;
            x = inx;
            y = iny;
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImg);
            loader.load(new URLRequest(type));
        }//constructor

        public function loadImg(e:Event):void{
            mc = MovieClip(e.target.content);
            loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadImg);
            refr.addChild(mc);
            mc.gotoAndStop(1);
            mc.x = x;
            mc.y = y;
            refr = null;
            loader = null;
            loaded = true;
        }//loadImg

    }//class

恕我直言,没有问题,您可以在其中包含装载器的类。 垃圾收集器会执行此任务并为您清理它。 最重要的部分是对用来将加载程序释放到垃圾回收器的侦听器进行“ removeEventListener”操作。

但是,如果您将有350个对象同时加载350个不同的图像,则可以采用另一种方式思考:如果创建一个精灵并将其加载一次并使用数十次又会怎样呢?

这里的问题(如果存在问题)与仅针对图像的并发http请求数有关。 如果它使加载过程变慢,请考虑精灵图片

干杯。

这听起来像是一个非常糟糕的主意。 您正在为每个实例加载一个新图像。

为什么不只在其中包含一个带有Loaders的类,它将作为您的图形存储库。 让它加载游戏特定部分中所需的所有图像,然后为所加载的每个图像公开BitmapData实例。

这样,您可以使每个Mob实例由其自己的位图以图形方式表示,但是每个位图的内容都将由图形存储库中单个加载的BitmapData实例定义,从而节省了大量内存,并且无需向服务器发出请求每个Mob的图形,这将是非常低效的。

在视觉上,您应该具有以下内容:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM