官方文档:https://docs.cocos.com/creator/2.2/manual/zh/scripting/
API: https://docs.cocos.com/creator/api/zh/
脚本开发指南
访问节点和组件
//1.创建变量
var temp,a,c=0;//一次创建多个
temp=12;//赋值
//动态决定
//JavaScript是解释时动态决定的,声明变量时无需指定变量的数据类型,数据保存在内存是有数据类型的,常用的有:
/*
number
boolean
string
undefined
null
object
*/
//2.加载场景
cc.director.loadScene("场景名");
//3.打印
cc.log("输出");//在网页F12控制台查看输出
//4.声明方法
print:function(){
},
/*
方法名:function(){
},
*/
//5.引入其他脚本
const player= require("player");//在class前写
//调用:
cc.Class({
extends: cc.Component,
//定义节点
properties: {
player:player
},
onLoad:function(){
this.Play.init();
}
});
//节点:node,组件:component
//组件类型:sprite(精灵,图像渲染)button(按钮)label(文字)
//6.节点获取
//获取组件所在节点
var node=this.node
//查找子节点
var cannons = this.node.children;//获取所有子节点
var tagent1= this.node.getChlidByName;//获取所有子节点
var tagent2= cc.find("Cannon 01/Barrel/SFX", this.node);//从当前路径开始查找
var tagent3= cc.find("Cannon 01/Barrel/SFX");//只传一个参数时,从场景根节点开始查找
//拖拽获取节点
//a.创建:在properties中定义节点(可能包括节点的默认值和类型);
//b、挂载:在相应的方法中获取节点获取相应节点,挂载到父元素
//例子:精灵图节点
cc.Class({
extends: cc.Component,
//定义节点
properties: {
node1:{
default: null,//默认值
type: cc.SpriteFrame//类型
},
node2:{
default: null,
type: cc.Label
},
},
onLoad: function () {
this.node2.getComponent(cc.Label).string="aaaaaaaa";//改变lable内容
}
};
//c、节点赋值:在cocos编辑器中
//c1、在左侧层级管理器中创建对应节点。
//c2、选中该节点的父元素,挂载节点到JS创建的节点上.找到对应的节点,把图片或者预制资源拖进去
//调用:this.node1(定义的节点名
//7.组件获取
//获取当前节点其他组件,this.node.getComponent===this.getComponent
var label = this.getComponent(cc.Label);
var move= this.getComponent("move");//获取用户自定义组件(通过脚本名
//8.节点操作->https://docs.cocos.com/creator/manual/zh/scripting/basic-node-api.html
//节点创建和销毁->https://docs.cocos.com/creator/manual/zh/scripting/create-destroy.html
this.node.active=false;//节点设置不激活
//改变节点的夫节点
this.node.parent = parentNode;
//或
this.node.removeFromParent(false);//false:不清除节点上绑的事件
parentNode.addChild(this.node);//为节点设置父节点
//返回所有子节点数组
this.node.children
//返回节点子节点数量
this.node.childrenCount
//设置位置
this.node.setPosition(100, 50);
this.node.setPosition(cc.v2(100, 50));
this.node.position = cc.v2(100, 50);
//销毁节点
this.node.destroy()
//9.properties属性声明
properties{
name:"aaa",
height:16,
any:[],
bools:[cc.Boolean],
color:new cc.Color(255,255,255,128),
player:cc.Prefab,
}
//完整声明:
properties: {
score:{
default: null,//默认值
displayName:"score"//显示名称
}
//声明数组
tetris:{
default:[],
type:[cc.Prefab]
}
}
/*
default: 设置属性的默认值,这个默认值仅在组件第一次添加到节点上时才会用到
type: 限定属性的数据类型,
visible: 设为 false 则不在 属性检查器 面板中显示该属性
serializable: 设为 false 则不序列化(保存)该属性
displayName: 在 属性检查器 面板中显示成指定名字
tooltip: 在 属性检查器 面板中添加属性的 Tooltip
*/
//10.预制体创建
properties: {
target: {
default: null,
type: cc.Prefab,
},//拖拽预制体
},
start: function () {
var scene = cc.director.getScene();
var node = cc.instantiate(this.target);//克隆预制体
node.parent = scene;//设置父节点
node.setPosition(0,0);//设置位置
},
//11.延时
setTimeout(function () {
this.target.destroy();
}.bind(this), 5000);
//12.场景加载切换->https://docs.cocos.com/creator/manual/zh/scripting/scene-managing.html
cc.director.loadScene("MyScene");//通过场景名
//跳转时不销毁
cc.game.addPersistRootNode(myNode);
//后台加载,在后面添加cc.director.loadScene,加载完后场景会自动跳转
cc.director.preloadScene("table", function () {
cc.log("Next scene preloaded");
});
//12.资源动态加载
//cc.loader.loadRes,从resources 文件夹加载,需要加载的资源都必须放置在 resources 文件夹
//加载预制体
cc.loader.loadRes("test assets/prefab", function (err, prefab) {
var newNode = cc.instantiate(prefab);
cc.director.getScene().addChild(newNode);
});
// 加载 SpriteFramevar
self = this;cc.loader.loadRes("test assets/image",
cc.SpriteFrame, function (err, spriteFrame) {
self.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
//释放cc.loader.releaseRes,和加载相同路径
cc.loader.releaseRes("test assets/image", cc.SpriteFrame);
cc.loader.releaseRes("test assets/anim");
//释放特定Asset实例
cc.loader.releaseAsset(spriteFrame);
//cc.loader.loadResDir加载相同目录下所有资源
cc.loader.loadResDir("test assets", function(err,assets){});
//加载test assets目录下所有,并获取路径
cc.loader.loadResDir("test assets", cc.SpriteFrame, function (err, assets, urls){});
//远程加载
// 远程 url 带图片后缀名
var remoteUrl = "http://unknown.org/someres.png";
cc.loader.load(remoteUrl, function (err, texture) {
if (err) {
console.error(err);
}
else {
self.pic.spriteFrame = new cc.SpriteFrame(texture);
}
});
// 远程 url 不带图片后缀名,此时必须指定远程图片文件的类型
remoteUrl = "http://unknown.org/emoji?id=124982374";
cc.loader.load({url: remoteUrl, type: 'png'}, function () {
if (err) {
console.error(err);
}
else {
self.myRankPic.spriteFrame = new cc.SpriteFrame(texture);
}
});
// 用绝对路径加载设备存储内的资源,比如相册
var absolutePath = "/dara/data/some/path/to/image.png"
cc.loader.load(absolutePath, function () {
// Use texture to create sprite frame
});
//资源释放问题->https://docs.cocos.com/creator/manual/zh/scripting/load-assets.html
//13.点击事件
this.node.on(cc.Node.EventType.TOUCH_START,function(t){
cc.log("点击了"); //cc.Node监听的节点
},this)
//手机触摸
cc.Node.EventType.TOUCH_START// 按下时事件
cc.Node.EventType.TOUCH_MOVE// 按住移动后事件
cc.Node.EventType.TOUCH_END // 按下后松开后事件
cc.Node.EventType.TOUCH_CANCEL // 按下取消事件
this.touchNode.on(cc.Node.EventType.TOUCH_START, this.touchStartEvent, this);
this.touchNode.on(cc.Node.EventType.TOUCH_END, this.touchEndEvent, this);
this.touchNode.on(cc.Node.EventType.TOUCH_CANCEL, this.touchEndEvent, this);
//鼠标点击
cc.Node.EventType.MOUSE_DOWN//当鼠标在目标节点区域按下时触发一次
cc.Node.EventType.MOUSE_ENTER//当鼠标进入目标节点区域
//按下键盘按键
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, function(t){
//cc.Node=监听的节点
cc.log("点击了");//按任意键显示
switch(event.keyCode) { //判定哪个按键
case cc.macro.KEY.a:
console.log('Press a key a');
break;
case cc.macro.KEY.d:
console.log('Press a key d');
break;
}
}, this);
//14.动作系统action
// 创建一个移动动作
var action = cc.moveTo(2, 100, 100);
// 执行动作
node.runAction(action);
// 停止一个动作
node.stopAction(action);
// 停止所有动作
node.stopAllActions();
//动作设置tag
action.setTag(1);
node.getActionByTag(1);
//顺序动作cc.sequence
var spe = cc.sequence(cc.moveTo(2, 100, 100),cc.moveTo(2, 2, 100));
node.runAction(spe);
//同步动作cc.swawn
var spe = cc.swawn(cc.moveBy(0.5, 0, 50),cc.scaleTo(0.5, 0.8, 1.4));
node.runAction(spe);
//重复动作 cc.repeat,repeatForever永远重复
var seq = cc.repeat(
cc.sequence(
cc.moveBy(2, 200, 0), cc.moveBy(2, -200, 0)
),5);//5:重复次数
//cc.speed速度动作
var act= cc.speed(
cc.swawn(cc.moveBy(0.5, 0, 50),cc.scaleTo(0.5, 0.8, 1.4)
),2);//2:动作速度,两倍速
//15.计时器schedule
this.schedule(()=>{
// 这里的 this 指向 component
this.doSomething();
}, 5,3,10);//5:以秒为单位的时间间隔,3:重复次数,10:延时开始时间,3,5可省略
//挂载脚本的页面隐藏时(active=false),会暂停执行
//scheduleOnce只执行一次
//16.网络连接->https://docs.cocos.com/creator/manual/zh/scripting/network.html
//17.对象池->https://docs.cocos.com/creator/manual/zh/scripting/pooling.html
//js随机数
Math.floor(number * Math.random());//number为0-number-1