cocos creator小白摸索之路(3)

微信飞机大战,只为熟悉cocos creator的属性方法,做了个简单的雏形
1.取节点的子节点用【getChillByName()】,也可以用【cc.find()】,取节点上的组件用【getComponent()】
2.用对象池可以减少性能损耗,比如在hero.js定义一个子弹的对象池

createBulletPool: function() {
        this.bulletPool = new cc.NodePool();
        let initCount = 7;
        for (let i = 0; i < initCount; i++) {
            let bullet = cc.instantiate(this.bulletPrefab);
            this.bulletPool.put(bullet);
        }
    },

这样在bullet.js中如果要讲不用的子弹放回对象池,记得要停止子弹的行为

removeSelf: function() {
        this.node.stopAllActions();
        this.node.getParent().getChildByName("hero").getComponent('hero').bulletPool.put(this.node);
    },

由于子弹会动,所以放回对象池的子弹位置什么的属性会变化,所以在制造子弹的时候要初始化子弹

hero.js:
createBullet: function() {
        let bullet = null;
        if (this.bulletPool.size() > 0) {
            bullet = this.bulletPool.get();
        } else {
            bullet = cc.instantiate(this.bulletPrefab);
        }
        bullet.parent = this.node.getParent();
        bullet.getComponent('bullet').init();
    },
bullet.js:
init () {
        this.setPos();
        this.startMove();
    },

在敌机爆炸上,和子弹结束处理一样,先停止行为和动画播放,在将敌机的sprite的spriteFrame属性设置下成最初敌机的图片

3.要保存记录,这个就需要用个json文件,只写了个实时得分

point.json:
{
    "curPoint": 0
}

在子弹和敌机碰撞时

enemy.js:
onCollisionEnter: function(other, self) {
        if (other.node.group == 'bullet') {
            this.getComponent(cc.BoxCollider).enabled = false;
            this.getComponent(cc.Animation).play();
            let node = this.node.getParent().getComponent('main');
            node.point += 100;
            cc.sys.localStorage.setItem('curPoint', JSON.stringify(node.point));
        }
    },

在主界面加一个label来显示分数

main.js:
update () {
        let curPoint = cc.sys.localStorage.getItem('curPoint');
        this.node.getParent().getChildByName('point').getComponent(cc.Label).string = "分数:" + curPoint;
    },

4.schedule函数内this指的是该组件,不需要用【bind()】等,来调用回调函数
5.let 和 var的区别,其实也没怎么弄懂,我是块区域我就用let比如【for()】里面,或者在一个小函数里面,如果我要定义的值会影响里面的嵌套函数啥的就会用var,网上对这个说明很多,这是一个【https://www.jianshu.com/p/9f7f053f7204 】
6.在 cc.callFunc 中不应该停止自身动作,由于动作是不能被立即删除,如果在动作回调中暂停自身动作会引发一系列遍历问题,导致更严重的 bug【https://docs.cocos.com/creator/manual/zh/scripting/actions.html?h=更严重 】

你可能感兴趣的:(cocos creator小白摸索之路(3))