对象池的效率

一个对象池里面放多个对象和建立多个对象池有什么区别吗?一个对象池放多个对象,还得用状态区分,写的时候很乱。效率差不多的情况下我还是想用多个对象池,有没有大大能讲一下,刚入坑的小白,想养成一个良好的写码习惯,最好能举个例子,像哪种情况应该怎么创!!!

其实自己可以实现一个多对象的对象池
官方提供的对象池子是用 this._pool = []; 数组缓存对象的
可以自己改成 表的形式 记录 这样一个对象池 可以放多个对象
看看源码 去改一下就ok

会写,就是不知道差别,毕竟一个对象池写多个对象要改的代码量很多,除了效率还有别的什么说法吗?

多个对象的意思是不同类型的对象放一个池吗?如果是这样,建议多个池,每个池都放相同类型的对象

代码量很多不存在的,就是操作数组能有啥效率问题,官方提供的才100行 你改改超不过150行,先实现功能在考虑效率

简单的来说,就像子弹和Al敌机把,可以三种写法,
①:不同类型子弹不同对象池,不同敌机不同对象池
②:子弹统一对象池,敌机统一对象池
③:子弹敌机统一对象池
要是写的话无疑第一种最舒服,但是很多人都用第二种,如果说为了效率,为啥不第三种呢?区分子弹敌机啊?那我按组件区分对象池不也ok?

所以说怎么创对象池看自己喜欢方式是吗?

一般都是第二种。因为子弹基本都有个子弹组件,不同的子弹只是组件初始化不同的值,改变飞行速度、伤害、图片样式。但是你要把子弹初始化为敌机,你起码得再添加个敌机的组件然后增加血量、攻击、子弹类型等等吧?

自己写对象池最方便,官方的对象池我用都不用。

var enemy:Enemy = new Enemy();

ResourcesPool.instance.put(enemy,10); //把对象丢进对象池,最多保存10个,超过,内部会销毁,数值为0能存无限多个

var enemy:Enemy = ResourcesPool.instance.get(Enemy); // 从对象池拿出对象,如果池子里每对象返回null。

其它对象也一个用法
var bullet:Bullet = new Bullet();
ResourcesPool.instance.put(bullet,0); //存进对象池
var bullet:Bullet = ResourcesPool.instance.get(Bullet); //从对象池取出

自己写的就是简单易用,又灵活,能控制存对象池对象的数量,防止爆内存,还方便移植,这个工具拿到egret和laya也是能用的

我是刚入坑的小白,感觉官方对象池还可以,不过您给我今后的思路,还是谢谢的

其实我认为如果没有非常危急的内存问题,第一种是最好的,这样你所有复用的东西 只需要重新设置一次位置,就可以重新复用,不需要重新初始化。如果有内存问题 可以在固定时间或者固定个数去清理掉一些对象来释放部分内存。

ok,谢谢

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。