// ...createEnemy:function(parentNode){letenemy =null;if(this.enemyPool.size() >0) {// 通过 size 接口判断对象池中是否有空闲的对象enemy =this.enemyPool.get(); }else{// 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建enemy = cc.instantiate(this.enemyPrefab...
同时,对象池还可以减少垃圾回收的频率,提高内存利用率。 对象池的优势 提高性能:对象池通过重复利用已经创建的对象,避免了频繁的对象创建和销毁操作,从而提高了系统的性能。相比于每次都创建新的对象,从对象池中获取已经存在的对象可以节省系统开销,并显著减少了系统响应时间。 资源管理和控制:对象池可以对对象进行...
1.对象池需要的接口 exportclassGameCommonPool{//实例的缓存列表privatestaticpool:Set<cc.Node>=newSet();//取出实例publicstaticrequestInstant(prefab:cc.Prefab):cc.Node{returnnull;}//回收实例publicstaticreturnInstant(instant:cc.Node,cleanup:boolean=true):void{}//清空对象池publicstaticreset():void{}}...
cocos的NodePool提供了一个数组,保存和获取数组内对象,并在保存和获取时可执行对象上的unuse和reuse方法。 使用相对简单,看看cocos教程即可。 主要是在获取对象池中实例时,不存在实例,则返回null,不会自动新建。 新建的代码得自己写。 cocos对象池源码 CCNodePool.js: 1 2 3 4 5 6 7 8 9 10 11 12 13 14...
function get() { if (objectPool.length > 0) { return objectPool.pop(); } else { return instantiate(prefab); } } function put(objectNode) { objectPool.push(objectNode); // 在此可以重置节点的状态 } for (let i = 0; i < initialSize; ++i) { ...
当我们需要销毁节点时,调用对象池实例的put(node) 方法,传入需要销毁的节点实例,对象池会自动完成把节点从场景节点树中移除的操作,然后返回给对象池。 这样就实现了少数节点的循环利用。 下面介绍具体操作: 第一步:准备好 Prefab 把你想要创建的节点事先设置好并做成 Prefab 资源,有些朋友可能不会制作预制体?
在Cocos Creator中,对象池的使用也非常简单方便。 对象池的原理是事先创建好一定数量的对象,然后在需要使用的时候从对象池中取出,使用完毕之后再放回对象池中,以供下次使用。这样可以减少频繁的对象创建和销毁操作,从而提高游戏的运行效率。 在Cocos Creator中,我们可以通过以下几个步骤来使用对象池: 1. 创建对象池...
通过开发经验给初学者对一些cocos creator2.0+的Api做一些深入的讲解,帮助初学者更好的学习cocos creator,更快速开发小游戏。 效果体验图如下 image.png 我们可以看到我们在未使用对象池(cc.NodePool)的时候,如果我们创建子弹特别多,那我们游戏的性能会显著的降低,为了解决这个问题我们引入了对象池的使用(cc.NodePool)...
使用示例 如有一个预制体fish,其上有一组件MyFish,MyFish有初始化方法init()和销毁方法myDestroy()。游戏中需管理一组MyFish,大量地创建和销...
cocos对象池的使用 enemy.js cc.Class({ extends: cc.Component, properties: { enemySpeed:0,//设置加速度},//初始化当前节点的y坐标init:function() {this.node.y = 0; }, onLoad () { }, start () { }, update (dt) {this.node.y +=this.enemySpeed;//每帧运动},...