Cocos 需要用到的Javascript速成

打开Cocos creator 官方文档,找到第一个小游戏页面

下滑,略微一瞄(怎么瞄?想你的每一秒),

https://docs.cocos.com/creator/manual/zh/getting-started/quick-start.htmlCocos 需要用到的Javascript速成_第1张图片

发现使用的是Javascript,哦豁,我不会。

不慌,百度w3school,点到JavaScript,https://www.w3school.com.cn/js/index.asp,

我们的目的是用cocos写游戏,那我们就先看看官方示例中每一行代码使用了什么。

先给大家两个小时跟着官方文档走一遍小游戏。

 

--------两个小时分界线----------

 

在VS中打开game.js,star.js,player.js三个文件,相信在刚刚的制作游戏体验中大家已经理解了game.js就是游戏主逻辑,star.js就是控制星星的生成和销毁,player.js就是控制小怪物的行动(不知道龙族5断更一年多有没有更新了)

Cocos 需要用到的Javascript速成_第2张图片

好吧,江南老贼还在抑郁症。

接下来继续说回代码问题,作为一个游戏,我们最关心的当然是我们能不能控制人物的行动了,上上下下,左右左右,BABA,

所以我们先看player.js,同时打开Cocos文档中的JavaScript速成页面

https://docs.cocos.com/creator/manual/zh/scripting/javascript-primer.html?h=javas

首先可以看到player.js中有以下一级结构。

cc.class({

});

这一步中cc指的是被封装的Cocos环境,后面定义的class类会在cocos这一环境下进行编译,什么叫环境呢?比如大家常说的政治正确,就是社会的环境之一,你在网上说啥话都要遵从这个环境,不然就会被关小黑屋(编译出错)。(能理解继承和派生的就忽略,这里只取速成要用的理解)

 

 

Cocos 需要用到的Javascript速成_第3张图片

 

那么现在理解了环境这一概念,cc.class({});就很好理解了,括号里写的东西必须遵从cc里规定的规范,不然就报错不给玩游戏。

接下来看二级目录(方法),

    extends: cc.Component, //cc.Component是一个制作好的组件,这句话的意思就是我接下来所有的行为会基于cc.Component来构建,也可以理解为头文件
    
    properties: {
        //定义基本参数
    },

    runJumpAction: function () {

       //反复横跳待机

       },

    playJumpSound: function () {
       //播放声音
    },

    onKeyDown (event) {
       
       //监听键盘A,D是否按下
    },

    onKeyUp (event) {
       //监听键盘A,D是否松开 
    },

    onLoad: function() {
        //初始化加载界面,就是大家打开王者荣耀loading和loading完成的时候发生的事情,
    },

    onDestroy () {
       //关闭键盘输入监听,键盘操作无法被读取,不能对游戏做出改变
    },    

    update: function (dt) {
       //这个是重点,游戏开始后会不断调用这个函数,比如设置游戏60帧,那么就会在一秒钟里调用60次这个函数,只要你手速够快,一秒里按左右左右30个轮回,理论上就会产生30个在(-1,0)和(0,0)坐标的界面,所以这个函数承担的是游戏响应刷新的功能,把你的行为反馈到游戏逻辑并给出响应动作之后的界面
       
    },

其实严格上来说第一句extends: cc.Component,属于第二级,其他都属于第三级,属于对cc.Compoment属性的声明与配置。各个方法的含义见注释。

相信大家在游戏练手的时候也发现了,每个cocos creator创建的js文件都会有一些已经写好的代码,这是因为cocos已经给我们搭好了一个框架,而这些代码就是框架的大体描述。

在几个js文件中,都会有几个相同的函数,相信你一定很好奇为什么。

这是因为一个对象会有一定的生命周期

js对象概念https://www.w3school.com.cn/js/js_objects.asp

生命周期https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html?h=%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

一个组件从初始化到激活,再到最终销毁的完整生命周期函数调用顺序为:onLoad -> onEnable -> start -> update -> lateUpdate -> onDisable -> onDestroy

接下来开始看3级目录,或许已经无法称它为目录了,因为接下来已经到了写函数的时候,应该叫三级内容(听起来怪怪的,我可没有说是毛片啊)。

   properties: {
        // 主角跳跃高度
        jumpHeight: 0,
        // 主角跳跃持续时间
        jumpDuration: 0,
        // 最大移动速度
        maxMoveSpeed: 0,
        // 加速度
        accel: 0,
      
        // 跳跃音效资源
        jumpAudio: {
            default: null,
            type: cc.AudioClip
        },
    },
这一部分负责组件基础属性的声明,与c++不同,在其他语言中取消了变量数值类型的声明,所以不需要 int a=0;而只需要a=0,就可以了。

我们可以看到在上面有两种不同的属性声明方式,

jumpHeight: 0,//找老婆:0,

jumpAudio: {                       //找老婆:{
            default: null,           //身材:36d,
            type: cc.AudioClip // 身高:168cm
        },                                //},

第一种是直接用键值对的方式进行定义赋值,第二种是类似于构造一个数据结构的方式进行定义,包括但不限于指明变量所使用的资源文件类型,默认状态。如上既第一种定义了一个变量赋值为0,第二种定义了一个叫jump Audio的东西,它必须是cc.AudioClip类型的文件,默认为null。

接下来我们看一个跳动方法

runJumpAction () {
        // 跳跃上升
        var jumpUp = cc.tween().by(this.jumpDuration, {y: this.jumpHeight}, {easing: 'sineOut'});
        // 下落
        var jumpDown = cc.tween().by(this.jumpDuration, {y: -this.jumpHeight}, {easing: 'sineIn'});

        // 创建一个缓动,按 jumpUp、jumpDown 的顺序执行动作
        var tween = cc.tween().sequence(jumpUp, jumpDown)
        // 不断重复
        return cc.tween().repeatForever(tween);
    },

 这里面涉及到了接口调用,对象定位,局部变量定义,

变量定义如下:

使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。

接口调用:就是中使用this来定位当前组件或变量,类似于python中每个函数都带有一个self参数

this属性参见https://www.w3school.com.cn/js/js_this.asp

接下来解释这个方法,

var jumpUp = cc.tween().by(this.jumpDuration, {y: this.jumpHeight}, {easing: 'sineOut'});

var jumpup = null,//定义了一个局部变量jumpup,初始化为null。

tween缓动系统https://docs.cocos.com/creator/api/zh/classes/Tween.html

Cocos 需要用到的Javascript速成_第4张图片

再看一下上面这一句代码:

 var jumpUp = cc.tween().by(this.jumpDuration, {y: this.jumpHeight}, {easing: 'sineOut'});

cc.tween指缓动模块

参数引入使用的是键值对模式,

 easing 可以用来使缓动更生动,singout是正弦曲线缓出函数,不太清楚是不是用傅里叶变换然后取侧实现的,下次再看

https://docs.cocos.com/creator/api/zh/classes/Easing.html

从cc中调用了tween模块,设计了一个y坐标上移jumpHeight,动作完成时间jumpDuration,对动作使用正弦曲线进行修饰的动作

总结一下现在学到的知识点:

我们需要控制一个角色或者物体,就可以给这个物体创建一个js脚本,然后在物体属性编辑器上添加用户脚本组件,接下来这个物体就会遵从脚本所制作的规则。

在js文件中,预设好了一个Cocos框架,在properties: {},中定义基础属性变量采用的规则是键值对,可以随便赋值,之后在Cocos creator编辑器中可以随便更改赋值,接下来就可以写方法了,

js中写方法与c++类似,基本规则为

function func1([参数]){
/*函数体*/
},
用逗号分隔各个函数
var func2=function([参数]){
/*函数体*/
},
接下来学习变量定义
键值对:

name:"不过是轮回",

变量:

var name =  "不过是轮回”

到此,Cocos框架中所有的常用语法知识点已经分析完成。

接下来进行另一个知识点的分析,全局变量和局部变量。

注意:javascript代码的执行是从上到下的

通常情况下使用

var a = 0;

的方式进行变量声明,

ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const。

这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量)。

https://www.w3school.com.cn/js/js_let.asp

使用 let 关键词声明拥有块作用域的变量,在块中重新声明变量不会重新声明块外的变量。

例如:

{ 
  var x = 10; 
}
// 此处可以使用 x
在函数外部可以看到这个变量x
{ 
 let x = 10;
}
// 此处不可以使用 x

在函数外部无法读取x,就跟没有出现过一样,称为隐藏变量,也可以理解为绝对性质的局部变量。

此外还有一个闭包概念,就是在一个函数中用var声明了一个变量x,接下来在函数内部会有其他行为调用x,但在整个类中x属于局部变量。

到此为止,已经足够看懂js文件并开始初步用Cocos写游戏了。

 

你可能感兴趣的:(#,Cocos官方案例技术理解)