生命周期

  1. onLoad:组件脚本的初始化阶段
  2. start:组件第一次激活前,也就是第一次执行 update 之前触发。start 通常用于初始化一些需要经常修改的数据,这些数据可能在 update 时会发生改变
  3. update:游戏开发的一个关键点是在每一帧渲染前更新物体的行为,状态和方位。这些更新操作通常都放在 update 回调中。
  4. lateUpdateupdate 会在所有动画更新前执行,但如果我们要在动效(如动画、粒子、物理等)更新之后才进行一些额外操作,或者希望在所有组件的 update 都执行完之后才进行其它操作,那就需要用到 lateUpdate 回调
  5. onDestroy:当组件或者所在节点调用了 destroy(),则会调用 onDestroy 回调,并在当帧结束时统一回收组件。当同时声明了 onLoad onDestroy 时,它们将总是被成对调用。也就是说从组件初始化到销毁的过程中,它们要么就都会被调用,要么就都不会被调用。
  6. onEnable:当组件的 enabled 属性从 false 变为 true 时,或者所在节点的 active 属性从 false 变为 true 时,会激活 onEnable 回调。倘若节点第一次被创建且 enabled true,则会在 onLoad 之后,start 之前被调用
  7. onDisable:当组件的 enabled 属性从 true 变为 false 时,或者所在节点的 active 属性从 true 变为 false 时,会激活 onDisable 回调。

克隆对象

克隆指定的任意类型的对象,或者从 Prefab 实例化出新节点
cc.instantiate(this.rank)

销毁对象

this.node.destroy()

获取组件

说明:获取节点上指定类型的组件,如果节点有附加指定类型的组件,则返回,如果没有则为空。
传入参数也可以是脚本的名称。
this.node.getComponent('componentName')
this.node.getComponent(cc.Sprite)  //获取当前node的精灵组件
item.getComponent('componentName')

Node类型

Cocos Creator 场景中的所有节点类
常用属性:
x Number 节点 X 轴坐标。
y Number 节点 Y 轴坐标。
z Number 节点 Z 轴坐标。
group String 节点的分组。
position Vec3 节点在父节点坐标系中的位置(x, y)
scale Number 节点相对父节点的缩放。
scaleX Number 节点 X 轴缩放。
scaleY Number 节点 Y 轴缩放。
scaleZ Number 节点 Z 轴缩放。
opacity Number 节点透明度,默认值为 255。
width Number 节点宽度。
height Number 节点高度。
zIndex Number zIndex 是用来对节点进行排序的关键属性,它决定一个节点在兄弟节点之间的位置。
children Node[] 节点的所有子节点。
childrenCount Number 节点的子节点数量。
active Boolean 当前节点的自身激活状态。
parent Node 该节点的父节点。
isValid Boolean 表示该对象是否可用(被 destroy 后将不可用)。

常用方法:
on 在节点上注册指定类型的回调函数,也可以设置 target 用于绑定响应函数的 this 对象。
off 删除之前与同类型,回调,目标或 useCapture 注册的回调。
runAction 执行并返回该执行的动作。

文档
https://docs.cocos.com/creator/api/zh/classes/Node.html?h=node

使用
// 激活,关闭节点
this.node.active = false
// // 更改节点位置
this.node.x = 120
this.node.y = 320
this.node.position = cc.v2(100, 50)
// // 节点旋转
this.node.rotation = 90
this.node.setScale(2, 2)
// // 更改节点尺寸
this.node.width = 100
this.node.height = 100
// // 更改颜色
this.node.color = cc.Color.RED
const node1 = cc.instantiate(cc.Node); // 克隆节点。
const node2 = cc.instantiate(cc.Prefab) // 复制预制节点。(比如,重复生成的牛)
cc.Node.destroy() // 销毁节点

SpriteFrame 类型 - Sprite(精灵)背景

渲染Sprite(精灵)时使用的图片资源
@property(cc.SpriteFrame)
bg: cc.SpriteFrame = null;
获取
this.node.getComponent(cc.Sprite).spriteFrame = this.bg

SpriteAtlas 类型 - Sprite(精灵)图集

精灵图集资源类。
@property(cc.SpriteAtlas)
avrs: cc.SpriteAtlas = null;
获取
this.avr.spriteFrame = this.avrs.getSpriteFrame('imgName')

Prefab类型 - 预制资源

声明
properties: {
    m_msItemPrefab:cc.Prefab,
}

[

](https://docs.cocos.com/creator/api/zh/)

RigidBody类型 - 刚体

RigidBodyType 刚体类型: Static, Kinematic, Dynamic or Animated.

Touch触摸事件

枚举对象定义 对应的事件名 事件触发的时机
cc.Node.EventType.TOUCH_START touchstart 当手指触点落在目标节点区域内时
cc.Node.EventType.TOUCH_MOVE touchmove 当手指在屏幕上移动时
cc.Node.EventType.TOUCH_END touchend 当手指在目标节点区域内离开屏幕时
cc.Node.EventType.TOUCH_CANCEL touchcancel 当手指在目标节点区域外离开屏幕时

API

API 名 类型 意义
touch cc.Touch 与当前事件关联的触点对象
getID Number 获取触点的 ID,用于多点触摸的逻辑判断
getLocation Object 获取触点位置对象,对象包含 x 和 y 属性
getLocationX Number 获取触点的 X 轴位置
getLocationY Number 获取触点的 Y 轴位置
getPreviousLocation Object 获取触点上一次触发事件时的位置对象,对象包含 x 和 y 属性
getStartLocation Object 获取触点初始时的位置对象,对象包含 x 和 y 属性
getDelta Object 获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性
使用:
this.node.on('touchstart', function (event) {

}, this);
this.node.on('touchmove', (e) => {
    const delta = e.getDelta()
    const {x, y}= delta
    this.node.x += x
    this.node.y += y
})

this.node.on(cc.Node.EventType.TOUCH_START, this.touchStart, this);
this.node.on(cc.Node.EventType.TOUCH_MOVE, this.touchMove, this);
this.node.on(cc.Node.EventType.TOUCH_END, this.touchEnd, this);
this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.touchCancel, this);

坐标换算

//触屏开始
this.node.on('touchstart', function(event){
    //获取世界坐标点
    let worldPosition = event.getLocation()
    //将世界坐标点转换为针对当前node的坐标点
    let localPosition = this.node.convertToNodeSpaceAR(worldPosition)
},this)

鼠标事件

// 使用枚举类型来注册
this.node.on(cc.Node.EventType.MOUSE_DOWN, function (event) {
  console.log('Mouse down');
}, this);

// 使用事件名来注册
this.node.on('mousedown', function (event) {
  console.log('Mouse down');
}, this);

键盘事件

onLoad () {
    cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this)
},
onKeyDown(event) {
    const { KEY } = cc.macro
    switch (event.keyCode) {
        case KEY.a:
            console.log(event.keyCode)
            console.log(KEY.a)
            console.log('aaaaaaaaa')
            break;
        case KEY.b:
            console.log('bbbbbb')
            break;
        default:
            break;
    }
},

物理系统

//开启物理系统
cc.director.getPhysicsManager().enabled = true;
//显示调试信息
cc.director.getPhysicsManager().debugDrawFlags = true

碰撞系统

//启用碰撞组件
cc.director.getCollisionManager().enabled = true
//显示调试信息
cc.director.getCollisionManager().enabledDebugDraw = true

动作系统

// 创建一个移动动作
var action = cc.moveTo(2, 100, 100);
// 执行动作
node.runAction(action);
// 停止一个动作
node.stopAction(action);
// 停止所有动作
node.stopAllActions();


开发者还可以给动作设置 tag,并通过 tag 来控制动作。

// 给 action 设置 tag
var ACTION_TAG = 1;
action.setTag(ACTION_TAG);
// 通过 tag 获取 action
node.getActionByTag(ACTION_TAG);
// 通过 tag 停止一个动作
node.stopActionByTag(ACTION_TAG);

顺序动作

说明:顺序动作可以让一系列子动作按顺序一个个执行
// 让节点左右来回移动
var seq = cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0));
node.runAction(seq);

同步动作

说明:同步动作可以同步执行对一系列子动作,子动作的执行结果会叠加起来修改节点的属性。
// 让节点在向上移动的同时缩放
var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));
node.runAction(spawn);

循环动作

let moveScale1 = cc.scaleTo(0.5, 1.5, 0.5)
let moveScale2 = cc.scaleTo(0.5, 0.5, 1.5)
let seqMoveScale = cc.repeatForver(cc.sequence(moveScale1, moveScale2))
this.node.runAction(seqMoveScale)

动作回调

动作回调本身也是一个动作,添加到顺序动作中执行

场景的跳转

在 Cocos Creator 中,使用场景文件名(不包含扩展名)来索引指代场景
//loadScene 通过场景名称进行加载场景
cc.director.loadScene("test")

preloadScene 预加载场景,你可以在任何时候调用这个方法
runScene 运行指定场景

对象池

说明:对象池就是一组可回收的节点对象,我们通过创建 cc.NodePool 的实例来初始化一种节点的对象池。
通常当我们有多个 prefab 需要实例化时,应该为每个 prefab 创建一个 cc.NodePool 实例。
当我们需要创建节点时,向对象池申请一个节点,如果对象池里有空闲的可用节点,
就会把节点返回给用户,用户通过 node.addChild 将这个新节点加入到场景节点树中。
使用:
//创建
properties: {
    enemyPrefab: cc.Prefab
},
onLoad: function () {
    this.enemyPool = new cc.NodePool();
    let initCount = 5;
    for (let i = 0; i < initCount; ++i) {
        let enemy = cc.instantiate(this.enemyPrefab); // 创建节点
        this.enemyPool.put(enemy); // 通过 put 接口放入对象池
    }
}

//获取
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; // 将生成的敌人加入节点树
    enemy.getComponent('Enemy').init(); //接下来就可以调用 enemy 身上的脚本进行初始化
}

//将对象返回
onEnemyKilled: function (enemy) {
    // enemy 应该是一个 cc.Node
    this.enemyPool.put(enemy); // 和初始化时的方法一样,将节点放进对象池,这个方法会同时调用节点的 removeFromParent
}

计时器

  • schedule:开始一个计时器
  • scheduleOnce:开始一个只执行一次的计时器
  • unschedule:取消一个计时器
  • unscheduleAllCallbacks:取消这个组件的所有计时器

注意:组件的计时器调用回调时,会将回调的 this 指定为组件本身,因此回调中可以直接使用 this

每隔 5s 执行一次
component.schedule(function() {
    // 这里的 this 指向 component
    this.doSomething();
}, 5);

10 秒后开始计时,每 5 秒执行一次回调,执行 3 + 1 次
// 以秒为单位的时间间隔
var interval = 5;
// 重复次数
var repeat = 3;
// 开始延时
var delay = 10;
component.schedule(function() {
    // 这里的 this 指向 component
    this.doSomething();
}, interval, repeat, delay);

两秒后执行一次回调函数,之后就停止计时
component.scheduleOnce(function() {
    // 这里的 this 指向 component
    this.doSomething();
}, 2);

取消计时器
this.count = 0;
this.callback = function () {
    if (this.count === 5) {
        // 在第六次执行回调时取消这个计时器
        this.unschedule(this.callback);
    }
    this.doSomething();
    this.count++;
}
component.schedule(this.callback, 1);

去除plist文件多图中的黑线

image.png

找到plist文件对应的png文件,选择png文件的filter mode为point
设置完要点击应用

声明数组类型

方法1
@property([cc.Integer])
phoneArray :number[] = []
方法2
@property(cc.Node)
items : Array<cc.Node> = []
方法3
@property({type : cc.AudioClip})
SoundArray : cc.AudioClip[] = []

加载JSON文件

//处理地图块
cc.Class({
    extends: cc.Component,
    properties: {
        mapData: {
            default: null,
            type: cc.JsonAsset
        }
    },
    start () {
    },
});

image.png