【cocos creator】基础知识

官方文档: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(); 
}, 5310);//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


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烧仙草奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值