Cocos脚本开发

来源:互联网 发布:淘宝芊芊香港代购 编辑:程序博客网 时间:2024/06/02 05:21

创建和使用组件脚本

在Cocos Creator中,脚本也是资源的一部分。
在资源管理器中创建选择Javascript来创建一份组件脚本

添加脚本

在节点的属性检查器中,点击“添加组件”按钮,选择添加用户脚本然后喧杂需要的脚本组件添加就可以了。这里写图片描述

使用cc.Class声明类型

cc.Class是一个很常用的API,用于声明Cocos Creator中的类

定义CCClass

调用cc.Class(),传入一个原型对象,在原型对象中以键值对的形式设定所需要的类型参数,就能创建所需要的类

CCClass中使用ctor属性声明构造函数,

声明属性

通过在组件脚本中声明属性,我们可以将脚本组件中的字段可视化的展示在属性检查器中,从而方便的在场景中调整属性值。
要声明属性,仅需要在cc.Class()中定义的properties字段中,填写属性名字和属性参数即可。

简单声明

在多数情况下,我们都可以使用简单声明,
当声明的属性为基本类型时,可以直接赋予默认值
当声明的属性具备类型时,可以在声明处填写他们的构造函数来完成

    cc.Class({        properties:{            height:0,//基本数据类型,包括:number,string,boolean,null等            target:cc.Node,            values:[cc.Integer]        }    })

当声明属性的类型继承自cc.valueType时除了构造函数,还可以直接使用实例作为默认值
当声明属性是一个数组时,可以在声明出填写他们的类型或构造函数来完成声明

完整声明

有些情况下,我们需要为属性声明添加参数,这些参数控制了属性在属性检查器中的显示方式,以及属性在场景序列化过程中的行为。
常用参数:
default:设置属性的默认值,仅在组件第一次添加到节点上时才会用到
type:限定属性的数据类型
visible:设为false时,则不再属性检查器中显示该属性
serializable:设为false时,不序列化该属性
displayName:在属性检查器面板中显示成指定的名字
tooltip:在属性检查器面板中添加属性的Tooltip

访问节点和组件

获得组件的节点,只要在组件方法里面访问this.node变量即可。

获得其他组件

需要获得同一节点上的其他组件,这就需要用到getComponent这个API
对于用户定义的组件而言,类名就是脚本的文件名,并且区分大小写。

利用属性检查器设置节点

最直接的方式就是在属性检查器中设置你需要的对象,这只需要在脚本中声明一个type为cc.Node的属性

     cc.Class({        properties:{            player:{                default:null,                type:cc.Node            }        }    })

这样会在属性检查器中显示出来,我们就可以将层级管理器上的任意一个节点拖到这个Player控件。

关闭/激活节点

使用this.node.active=true/false可以激活或者关闭节点,
激活节点时,在场景中会试用该节点及其子节点,除非子节点单独关闭,update()方法会执行。

更改节点的变换(位置,旋转,缩放,尺寸)

位置

分别对x轴和y轴坐标赋值:this.node.x this.node.y
使用setPosition方法: this.node.setPosition(x,y)
设置position变量: this.node.position = cc.v2(x,y)

旋转

this.node.rotation = 90或this.node.setRotation(90)

缩放

this.node.scaleX this.node.scaleY
this.node.setScale(v)当传入单个值时,会同时修改scaleX和scaleY
this.node.setScale(x,y)

尺寸

this.node.width this.node.height
this.node.setContentSize(x,y)

锚点anchor

this.node.anchorX this.node.anchorY
this.node.setAnchorPoint(0.5,0.5)

常用组件接口

cc.Component是所有组件的基类,任何组件都包括如下常见接口:
this.node:该组件所属的节点实例
this.enabled: 是否每帧执行该逐渐的update方法,同时也用来控制渲染组件是否显示
update(dt): 作为组件的成员方法,每帧都会执行
onLoad(): 组件所在节点进行初始化时执行
start(): 会在组件第一次update之前执行,通常用于需要在所有逐渐的onLoad初始化完毕后执行的逻辑

生命周期回调

Cocos Creator为组件脚本提供了生命周期的回调函数。用户只要定义特定的回调函数,Creator就会在特定的时期自动执行相关脚本,用户不需要手工调用他们。

onLoad

逐渐脚本的初始化阶段,onLoad回调会在组件首次激活时触发,在onLoad阶段,保证了你可以获取到场景中的其他节点,以及节点关联的资源数据,onLoad总是在任何start方法之前执行,这能用于安排脚本的初始化顺序。

start

start回调函数会在逐渐第一次激活前,也就是第一次执行update之前触发,start通常用于初始化一些中间状态的数据,这些数据可能在update时会发生改变。

update

游戏开发的一个关键点是在每一帧渲染钱更新物体的行为,状态和方位,这些更新通常都放在update回调中

lateUpdate

update会在所有动画更新前执行,lateUpdate在更新完之后进行操作

onEnable在组件的enabled=true或者this.node.active = true,执行
onDisable在组件的disabled=true或者this.node.active=false执行

onDestroy

当逐渐或者所在节点调用了destroy(),则会调用onDestroy回调,并在当帧统一收回组件

创建和销毁节点

创建新节点

    //使用new创建    var node = new cc.Node('Sprite')    //克隆已有节点cc.instantiate()    var node = cc.instantiate(this.player)

创建预制节点

设置一个预制Prefab,并通过cc.instantiate生成节点,其type为cc.Prefab

    cc.Class({        properties:{            target:{                default:null,                type:cc.Prefab            }        },        onLoad:function(){            var target = cc.instantiate(this.target)        }    })

销毁节点

通过node.destroy()函数,可以销毁节点。销毁节点并不会立刻被移除,而是当前帧逻辑更新结束后,统一执行,
当节点销毁后,就处于无效状态,可以通过cc.isValid判断当前结点是否已经被销毁

加载和切换场景

在Cocos Creator中,我们使用场景文件名,来索引自带场景,并通过以下接口进行加载和切换操作:

    cc.director.loadScene("NewScene")    //记载场景时,可以附加一个参数用来执行场景加载后的回调函数    cc.director.loadScene("NewScene",callback)

预加载场景

cc.director.loadScene()会在加载场景之后自动切换运行新场景,有些时候我们需要在后台静默加载新场景,并在加载完成后手动进行切换,使用preLoadScene()接口对场景进行预加载
之后在合适好的时间使用loadScene真正切换场景

监听和发射事件

监听事件

事件处理是在节点完成的,对于组件我们通过访问节点this.node来注册和监听事件,监听事件可以通过this.node.on()函数来注册

    //使用函数绑定    this.node.on('mousedown',function(event){    }.bind(this))    //使用第三个参数    this.node.on('mousedown',function(event){    },this)

我们还可以使用once方法,只执行一次,响应后就关闭监听事件
我们使用off方法关闭监听

发射事件

通过两种方式发射事件:emit和dispatchEvent,区别在于后者可以做事件传递

dispatchEvent方法,会进入事件派送阶段,采用冒泡的方式,从事件发起节点,不断地向上传递给他的父级节点,直到达到根节点或者在某个节点的相应函数中做了终端处理,event.stopPropagation()

全局系统事件

全局系统事件是指与节点树不相关的各种全局事件,有cc.systemEvent来同意派发,包括键盘事件和设备重力感应事件

全局系统事件是通过cc.systemEvent.on(type,callback,target)来注册的

键盘事件

事件监听类型:cc.SystemEvent.EventType.KEY_DOWN
cc.SystemEvent.EventType.KEY_UP

    onLoad:function(){        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.keyDown,this)    }

重力感应事件

事件监听类型:cc.SystemEvent.EventType.DEVICEMOTION

    onLoad:function(){        cc.systemEvent.on(cc.SystemEvent.EventType.DEVICEMOTION,this.motton,this)    }

动作系统

创建动作:var action = cc.moveTo(200,200)
执行动作:node.runAction(action)
停止动作:node.stopAction(action)
停止所有动作:node.stopAllActions()

基础动作

基础动作就是实现各种形变,位移动画的动作,如:cc.moveTo,cc.rotateBy,cc.scaleTo

容器动作

顺序动作:cc.sequence(),可以让一系列自动做顺序一个个执行
同步动作:cc.spawn(),可以同步执行一系列动作
重复动作:cc.repeat(),可以用来多次从重复动作,第二个参数设置次数
永远重复动作:cc.repeatForever()
速度动作:cc.speed(),改变目标动作的执行速率,第二个参数设置速率
动作回调:在同一个sequence()中可以使用多次回调

缓动动作

不可单独存在,是为了修饰基础动作而存在的
action.easing()

使用计时器

在Cocos Creator中我们可以使用schedule()定义计时器

开始一个计时器

schedule(),时间单位是秒

    component.schedule(function(){        this.runAction(action)    },5)

更灵活的计时器

    component.schedule(function(){    },interval,repeat,delay)    //interval:时间间隔    //repeat:重复次数    //delay:开始延时

只执行一次的计时器

    component.scheduleOnce(function(){    },5)

取消计时器

    component.unschedule()    //取消所有计时器    component.unscheduleAllCallbacks()
原创粉丝点击