[英]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.