欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cocos creator小白摸索之路(3)

程序员文章站 2024-03-16 16:40:40
...

微信飞机大战,只为熟悉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