zoukankan      html  css  js  c++  java
  • 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; //每帧运动
        },
    });

    game.js

    cc.Class({
        extends: cc.Component,
    
        properties: {
    
            enemyPrefab: { 
                default: null,
                type: cc.Prefab,
            },
        },
    
        createEnemy: function (parentNode) {
            let enemy = null;
            if (this.enemyPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
                enemy = this.enemyPool.get();
            } else { // 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建
                enemy = cc.instantiate(this.enemyPrefab);
            }
            enemy.parent = parentNode; // 将生成的敌人加入节点树
            this.enemyNew = enemy;
            enemy.getComponent('enemy').init(); //接下来就可以调用 enemy 身上的脚本进行初始化,
            //如果不初始化enemy,在从对象池中获取this.enemyPool.get();的时候,该enemy身上的脚本参数还接着上次调用的时候;
            //因为执行this.enemyPool.put();只是把enemy重新放回对象池,并不是真正销毁;执行this.enemyPool.get()又可以重新获取出来;
        },
    
        //监听键盘
        setInputControl: function () { 
            cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
            
        },
    
        onKeyDown: function (event) {
    
            switch(event.keyCode) {
                case cc.KEY.t:
                    this.enemyPool.put(this.enemyNew);    //点击键盘T键销毁敌人
                    break;
                case cc.KEY.c:
                    this.createEnemy(this.node);  //点击C键创建敌人
                    break;
            }
        },
    
    
        onLoad () { 
            this.enemyPool = new cc.NodePool(); //new一个对象池出来
            this.setInputControl();  //加载场景后持续监听键盘
    
        },
    
        // start () {
        //     console.log(this.enemyPool.size());
        //     this.createEnemy(this.node);
            
        // },
    
        update (dt) { 
            console.log(this.enemyPool.size());
        },
    });
  • 相关阅读:
    0621回顾与总结
    0614--演示
    学习进度条
    实验四主存空间的分配和回收
    学术诚信和职业道德
    《构建之法》读第六、第七章有感
    0422 Step2-FCFS调度
    java 版的复利计算器(张俊毅 周修文)
    复利程序(c语言)(张俊毅 周修文)
    《构建之法》第4章
  • 原文地址:https://www.cnblogs.com/JahanGu/p/9322883.html
Copyright © 2011-2022 走看看