Cocos Creator 对象池NodePool

摘要:
版本:2.3.4参考:cocos教程:使用对象池cocos的NodePool提供了一个数组,保存和获取数组内对象,并在保存和获取时可执行对象上的unuse和reuse方法。使用相对简单,看看cocos教程即可。主要是在获取对象池中实例时,不存在实例,则返回null,不会自动新建。新建的代码得自己写。cocos对象池源码CCNodePool.js:cc.NodePool=function{this.poolHandlerComp=poolHandlerComp;this._pool=[];};cc.NodePool.prototype={constructor:cc.NodePool,size:function(){returnthis._pool.length;},clear:function(){varcount=this._pool.length;for{this._pool[i].destroy();}this._pool.length=0;},put:function{if{//Removefromparent,butdon'tcleanupobj.removeFromParent;//Invokepoolhandlervarhandler=this.poolHandlerComp?

版本:2.3.4

参考:

cocos教程:使用对象池

cocos的NodePool提供了一个数组,保存和获取数组内对象,并在保存和获取时可执行对象上的unuse和reuse方法。

使用相对简单,看看cocos教程即可。

主要是在获取对象池中实例时,不存在实例,则返回null,不会自动新建。 新建的代码得自己写。

cocos对象池源码

CCNodePool.js:

cc.NodePool = function (poolHandlerComp) {
    this.poolHandlerComp = poolHandlerComp;
    this._pool = [];
};
cc.NodePool.prototype = {
    constructor: cc.NodePool,

    size: function () {
        return this._pool.length;
    },

    clear: function () {
        var count = this._pool.length;
        for (var i = 0; i < count; ++i) {
            this._pool[i].destroy();
        }
        this._pool.length = 0;
    },

    put: function (obj) {
        if (obj && this._pool.indexOf(obj) === -1) {
            // Remove from parent, but don't cleanup
            obj.removeFromParent(false);

            // Invoke pool handler
            var handler = this.poolHandlerComp ? obj.getComponent(this.poolHandlerComp) : null;
            if (handler && handler.unuse) {
                handler.unuse();
            }

            this._pool.push(obj);
        }
    },

 
    get: function () {
        var last = this._pool.length-1;
        if (last < 0) {
            return null;
        }
        else {
            // Pop the last object in pool
            var obj = this._pool[last];
            this._pool.length = last;

            // Invoke pool handler
            var handler = this.poolHandlerComp ? obj.getComponent(this.poolHandlerComp) : null;
            if (handler && handler.reuse) {
                handler.reuse.apply(handler, arguments);
            }
            return obj;
        }
    }
};

module.exports = cc.NodePool;

免责声明:文章转载自《Cocos Creator 对象池NodePool》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS 关闭键盘的几种方式MongoDB学习笔记(二)访问权限下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于PHP自动捕捉处理错误和异常的尝试

  之所以想着做错误和异常的自动处理是因为:     用的公司自己的框架写API,没有异常和错误相关功能,     而每次操作都进行try...catch,有点繁琐不说,感觉还很鸡肋,即使我catch到了,还是得写代码进行处理,哪怕封装了一个方法进行处理也还是繁琐,     这种情况应该是程序自动进行处理,不该是这样弱智的人工try...catch,然后处...

002输入子系统驱动

输入子系统概念介绍(第十三课/第一节) 回顾第三个驱动程序(中断方式的按键驱动程序)和测试程序,发现有一些缺点:这个驱动程序没办法用在别人写的现成的应用程序上(比如:QT),因为别人写的应用程序肯定不会来打开你这个"/dev/third_chrdev"。别人打开的是一些现成的设备(比如:/dev/tty),甚至别人都不打开设备,而是直接调用 scanf()...

Cocos Creator 加载使用protobuf第三方库,因为加载顺序报错

版本2.3.4 参考: cocos教程:插件脚本 在使用protobuf第三方库时,作为插件使用,但是保存后运行,有报错提示。 原因是第三方库有依赖关系,A依赖B,但是A先加载进来,B后加载进来,导致A加载完成时找B时找不到。 查看官方教程,插件脚本是根据字母顺序加载的 原来的文件加载顺序如下: protobuf-bundles.min.js proto...

Cesium动态绘制实体(点、标注、面、线、圆、矩形)

  //自定义绘制图形,支持 点,线,面,矩形,圆,标识,可自定义绘制过程中的和绘制完的预览 this.drawGraphic = function(view,_mode,_callback,_GraphicProperty){ //清空所有可能的监听和画到一半的图形 if(handler){...

flask logger

Flask uses standard Python logging. All Flask-related messages are logged under the 'flask' logger namespace. Flask.loggerreturns the logger named 'flask.app', and can be used to...

Android 聊天室(一)

         为了提高自己在Android开发上的能力,博主决定写一个类似于QQ、微信的聊天软件。不过,简单的想想之后发现,要实现这样的一个聊天软件,需要学习和掌握的东西还很多。作为一个Android开发的小白,也没有足够的实力能很快对这个APP的开发有很大的突破。          于是,博主参考《疯狂Android讲义》中关于“Android网络...