cocos 文档学习笔记(一)

 阅读约 7 分钟

tips

  • this.node.destory()和this.node.removeFromParent
    第一次接触到cocos creator的this.node.destory()是在做官方给出的事例,但是发现调用这个destory会报错,于是搜索了一下,也没有结果,但是发现了一个与他相似的东西叫做this.node.removeFromParent() 试了一下 这个倒没有出现问题。先记录一下 ,想搞明白这个destory()到底是设么毛病。

    感觉自己解决了,拼写问题,这个坑感觉还蛮大的,文档给出的是troy但个人常用写法为tory
  • Math.abs()
    顾名思义abs即absolute
    返回绝对值的意思
  • this.node可以获得当前组件
    获得同一个节点上的其他组件要用getComponent

    start: function () {
        var label = this.getComponent(cc.Label);
        var text = this.name + ' started';
    
        // Change the text in Label Component
        label.string = text;
    }
    也可以传入一个类名。对用户定义的组件来说类名就是脚本名
     var rotate = this.getComponent("SinRotate");
  • 利用属性检查器设置组件

在上面的例子中,如果你将属性的 type 声明为 Player 组件,当你拖动节点 "Player Node" 到 属性检查器,player 属性就会被设置为这个节点里面的 Player 组件。这样你就不需要再自己调用 getComponent 啦。

    // Cannon.js
    var Player = require("Player");

    cc.Class({
        extends: cc.Component,
        properties: {
            // 声明 player 属性,这次直接是组件类型
            player: {
                default: null,
                type: Player
            }
        },
        start: function () {
            var playerComp = this.player;
            this.checkPlayer(playerComp);
        },
        //...
    });
还可以将属性的默认值由 null 改为数组[],这样你就能在 属性检查器 中同时设置多个对象。

不过如果需要在运行时动态获取其它对象,还需要用到下面介绍的查找方法。

生命周期

onLoad组件脚本的初始化

一般在场景载入时触发该回调

start

第一次执行 update 之前触发。start 通常用于初始化一些中间状态的数据,这些数据可能在 update 时会发生改变,并且被频繁的 enable 和 disable。

update很关键,游戏开发的关键点

每一帧渲染物体的行为,状态,方位等。这些更新操作通常都放在update中

lateUpdate

update会在所有动画更新前执行
但如果要在动画效果如粒子效果更新之后才进行额外操作,就要放在lateUpdate中回调

onDestroy

当组件或者所在节点调用了destroy()则会调用onDestroy回调

onEnable

当组件的 enabled 属性从 false 变为 true 时,或者所在节点的 active 属性从 false 变为 true 时,会激活 onEnable 回调。倘若节点第一次被创建且 enabled 为 true,则会在 onLoad 之后,start 之前被调用。

onDisable

当组件的 enabled 属性从 true 变为 false 时,或者所在节点的 active 属性从 true 变为 false 时,会激活 onDisable 回调

节点操作

  • 节点的创建、克隆、创建预制节点和销毁
  1. 创建

    cc.Class({
        extends: cc.Component,
    
        properties: {
            sprite: {
            default: null,
            type: cc.SpriteFrame,
            },
        },
        start: function () {
            <!-- 通过new cc.Node实例化一个节点 -->
            var node = new cc.Node('Sprite');
            <!-- 将节点添加为组件 -->
            var sp = node.addComponent(cc.Sprite);
            <!-- 将组建添加到场景中 -->
            sp.spriteFrame = this.sprite;
            node.parent = this.node;
        },
    });
  2. 克隆通过cc.instantiate来完成

        cc.Class({
            extends: cc.Component,
    
            properties: {
                target: {
                default: null,
                type: cc.Node,
                },
            },
    
            start: function () {
                var scene = cc.director.getScene();
                var node = cc.instantiate(this.target);
    
                node.parent = scene;
                node.setPosition(0, 0);
            },
        });
  3. 创建预制节点与克隆,不过type那里是cc.Prefab,我目前的理解是相当于克隆了一份预制节点
  4. 销毁节点采用this.node.destroy()即可
阅读 670发布于 2018-09-18

推荐阅读
目录