零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)

客户端配置

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第1张图片

一、扯几个概念


问题:cocos2dx引擎到底如何运作的?
在解答这个问题前,需要瞎扯几个概念。

1.颜色

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第2张图片

在自然界中,存在一种场,叫电磁场。电荷粒子从高能级运动状态变化到低能级运动状态时,就会释放电磁波辐射。电磁波存在各种波长,波长在400~760nm之间的电磁波可以被人类识别,这些电磁波就叫做可见光。人脑对可见光的感觉,体现在颜色上,不同的可见光混合到一起,人脑可以感觉到不同的颜色。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第3张图片

科学家发现了三颜色规律,各种颜色可以用红光、绿光和蓝光混合组成。用数学来描述颜色,就是三个变量RGB,R代表红色,G代表绿色,B代表蓝色。
在计算机中,用内存来保存记录的数据,因为图片颜色的数据太多,会占用大量的计算机内存,要尽量用更少的字节数来保存颜色的数值。由于人的眼睛对颜色区分的准确度不是很高,可以把三颜色中三中单色,比如红色的数值,都进行切割成256份,刚好是一个字节数的最大值,每一份是眼睛可区别的最小精度,多少份表示红色的数值。例如:红色100和红色101,眼睛可以分辨出来。如果在100与101之间再分割,眼睛就分辨不出来,这种分割就没啥意义,浪费内存。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第4张图片

因此,一种颜色,可以表示成RGB,加上透明度A(透明度其实就图片之间混合一起的权重)。一个变量占用1字节内存,四个变量占用4字节内存,相当于一个32位整数的内存大小。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第5张图片

在美术设计领域,设计师对颜色斤斤计较(这是长期训练出来的能力),不允许有一个颜色数值的误差,但是小数点运算会带来误差。例如,设计师想把红色100.6和红色10.4相加,得到红色111。由于8位整数无法记录更精确的数值,导致的结果是红色100.6变成红色100,红色10.4变成红色10,相加计算的结果是110,相差了1个数值。所以,在高要求的美术设计,需要用64位的整数来记录颜色,红色可以用两个字节来记录,可以记录更多的红色数值。物极必反,过高的字节数记录颜色,比如256位,就没啥意义,纯属浪费内存,眼睛根本不可能分辨出那么仔细的颜色,除了特殊的电磁波探测仪。

2.像素和图片

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第6张图片

因为人的眼睛对距离分辨的准确度不高,所以用图片记录一幅画,可以采取近似取样。把这幅画分割成多个小方格区域。一个小方格代表一个像素,这个小方格区域内的各点颜色,取一个平均值,用这个平均值来表示这个小方格区域总体的颜色,用这种方式记录的图片与真实世界对比,眼睛分辨不出太大的差别。这个小方格就是像素。一个像素可以用一个颜色值RGBA表示。在计算机中,习惯性用4个字节记录这个数值。然后,把这些像素数据记录到一起,就是这张图片的数据,保存到硬盘,就是图片文件,比如bmp图片。
一张960X640的图片,总共有960X640=614400个像素。iPhoneX的后置竖形双摄像头是1200万像素,拍照出来的照片文件是很大的。需要进行压缩或者有损压缩,丢弃不重要的像素,才能方便传输和存储。也就诞生了各种图片格式。比如png格式图片,jpg格式图片则丢弃透明度A,可以节省四分之一的内存。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第7张图片

在理论上,可以这样解释这种现象。由于人的局限性,认识一个东西,需要参照系。举个例子:一把尺子,最小刻度是毫米,它只能精确测量到毫米。有一百个小球,它们的直径是从0.1毫米依次增大到10毫米。对于这把尺子来说,它只能准确测出10种尺寸的球。1毫米的球,2毫米的球。。。。。等等。100种大小连续的球,对于这把尺子来讲,被分割成10种尺寸的球,被量子化,变成粒子性。在这把尺子的世界里,它的认知只有10种尺寸的球;在准确的世界,其实有100种球,但对于尺子来说无可奈何。所以,我们把这幅画,由于眼睛这把尺子的准确度不高,可以把连续的尺寸进行量子化,用一组量子化的像素描述这幅画。这就是量子力学测不准的原因吧,认知有限。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第8张图片

对于我们的眼睛来说,我们在意的是这幅画表达的内容是什么,即宏观现象,微观世界眼睛无法测量,所以无法描述(举个例子:准确度是毫米的尺子,测量1.2毫米的物体和测量1.8毫米的物体。由于认识的局限性,导致无法分辨出这两个物体长度。)。但是,只要这些微观像素集合到一起,能描述这幅画就可以。也就是大量的粒子,一起运动,可以表现出波动性,展示出有规律的连续性运动,让眼睛认识到这种宏观现象,大脑也感觉出了这幅画的内容。这就是图片存在的意义了。
那么像素的规律运动又应该怎样理解呢?一个像素,代表图片的一个小格子区域,在这个格子里的任意一点,是不可能出界的,不然它就不在这个格子里。这就是大量的像素的有规律运动了——不出界运动。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第9张图片

由此看来,眼睛的认识是有缺陷的,由于不能无限精确,导致不能准确认识世界。想要获得更准确的认知,需要花费更大的成本。这就是人生价值所在,追求完美。

3.动画

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第10张图片

在最佳的效果和最省的成本下,进行平衡,人类选择了最合适的东西。记录颜色,采用32位整数。在单位面积下,图片包含多少个像素,在数学上可用分辨率来描述。记录图片常用的分辨率,也有常用的大小,比如iPhone4的屏幕分辨率是960x640。
播放动画,也是因为眼睛的缺陷,每秒钟播放60张图片就够了,太多就不够经济了。
一台摄像机,每秒钟采样60次,如果一发子弹在少于1/60秒的时间内飞过摄像头,摄像头是捕捉不到子弹的。

4.显示器

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第11张图片

显示器是根据眼睛认识动画的原理,开发出来的发光设备。如果有外星人,它的眼睛能在1/120秒的时间内看到飞过的物体,那么人类的显示器不适合外星人使用了。外星人需要使用更昂贵的显示器,帧率达到120,而不是60。而人类没必要生产外星人的显示器供自己使用。
显示器由非常多盏小灯组成,单位面积描述这些小灯的数量就是分辨率,显示器可以单独控制每一盏小灯的亮度和显示的颜色,借助眼睛的缺陷来让人脑感觉到显示的图片。

5.显卡

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第12张图片

显卡的作用就是向显示器输入图片数据。为了在显示器上显示一位美女回眸一笑,操作系统读取视频文件,把视频数据,逆向解压缩,还原成一组组图片。然后按时间顺序向显卡传输图片数据,显卡再按照指令,立刻把图片数据传输给显示器。只要每秒播放60张美女的动作照片,眼睛就可以看到显示器美女的回眸一笑啦。
由此可推算,显卡向显示器传输的数据是海量的。iPhone4的帧率是60,分辨率是960X640,一个像素大小是32位。一秒钟需要传输的数据量为60X960X640X32=1179648000Byte=140.625MB。

6.OpenGL

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第13张图片

我们不能只依靠摄像机制作动画,还想使用电脑制作动画。在这个需求下,OpenGL腾空出世。
OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
OpenGL在苹果公司的推动下,也推出了OpenGL ES移动版本。不过,OpenGL还是不能满足需求,又诞生新的技术,如Vulkan图形程序接口。
cocos2dx采用了OpenGL ES2.0技术。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第14张图片

那OpenGL怎样实现制作图片呢?这是一个数学问题。毕竟电脑只是一个运算工具。需要数学家找到这个数学模型,然后由程序开发者写程序实现这个数学模型。作为经典计算机,只能做经典数学运算。整个数学模型也就是一个数学函数:y=f(x)。
显卡可以控制所有的像素点的显示,包括亮度和颜色,在数学上表现为RGBA四个变量,A表示亮度,RGB表示颜色(红色、绿色和蓝色)。这些变量是我们想要的结果,合并一起就是输出值y。因此,我们可以借助数学模型y=f(x)不断去改变y,实现我们想要的效果。改变y值两种方式,一种是改变输入变量x,另一种是改变f函数。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第15张图片

显卡有多少分辨率就会有多少个像素点。比如分辨率是960X640,那么就有960X640个像素。一个像素对应一个函数,有960X640个像素集合,就会对应960X640个函数集合。由此得出,960X640个输入变量和960X640个函数,计算得出960X640个函数值y。这是经典的线性代数——矩阵运算。由于矩阵运算存在数学定律,可以把程序固化到硬件上,大幅提高运算性能。GPU就这样诞生了,它独立于CPU。在线性运算方面,GPU是很强大的,在区块链技术和神经网络运算上用途非常广泛。
从数学模型推测,GPU的运算量是非常巨大的,代价也是很明显的,显示卡发热,消耗大量的电能。为了节省电能和降低设备发热。我们需要想一些办法,让GPU运行良好。在数学上,我们的目标是函数y值不变,改变输入参数x和函数f()。参数x是必须要的,不可省略,只能在函数f上大小算盘。只要函数f的运算量降下一点,那效果是很明显的,960X640个下降量,总体节省运算量非常可观。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第16张图片

在OpenGL开发中,函数f对应于shader,shader函数要尽可能简单。最好是y=f(x) =x。也就是,输入的东西等于输出的。在开发过程中,尽量用图片纹理去绘制效果,把特效预先地生成图片纹理,在绘制的时候,直接绘制最终的纹理图片。而不是通过shader去创作效果,后果很严重,GPU发热很厉害。

那OpenGL是怎样绘制3D的呢?其实很简单,3D模型可以通过数学运算,比如投影运算,变成2d图片。然后,显卡把变换成的2d图片拿去显示器去显示,这就是3D效果了。作为显示器,完全不知掉神马是3D模型,呐喊道:我要图片不要给我模型。

7.cocos2dx

OpenGL只是解决数学模型的线性运算问题。使用它的api制作3D特效,那是非常痛苦的。为了提高生产效率,有专业的人专门开发方便使用OpenGL的库,让游戏开发人员摆脱枯燥繁琐的code工作,把时间和精力专注在开发内容上。cocos2dx就是代表之一。cocos2d原本是一个python框架。巧遇智能手机风口,cocos2d借此机会,发布objective C版,足足火了一把。后来,国内的团队用C++进行实现,才有了后来的cocos2dx。为了实现热更新,绑定了lua脚本,支持跨全部平台,加入js脚本。

二、下载cocos2dx


cocos2dx可以上官网下载,或者到github上下载。
本文将使用git命令下载。打开终端,cd到doudizhu/chengxu/resource目录。执行命令

git clone https://github.com/cocos2d/cocos2d-x.git
零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第17张图片

三、安装cocos2dx

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第18张图片

下载完毕,在无从下手时,养成好习惯。看开源项目的README.md文件。md文件格式,是Markdown标记语言编写的文件。本教程也是用Markdown创作。在Mac系统中,推荐一个免费开源的Makrdown编辑器MacDown。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第19张图片
  1. 按照cocos2dx的README.md文件指引,下载独立模块和子模块并进行安装,在终端,cd到doudizhu/chengxu/resource/cocos2d-x目录,执行命令
//下载独立模块,主要是第三方库,相对路径:cocos2d-x/external
python download-deps.py
//下载子模块,主要是cocos2dx的工具,相对路径:cocos2d-x/tools
git submodule update --init
//执行python脚本,配置环境变量
./setup.py

完成cocos2dx配置。
mac自带python环境。执行./setup.py的python脚本的目的是把cocos2dx的配置加入到系统变量中。详情可看mac的.bash_profile文件。执行命令

cat ~/.bash_profile

可以快速查看.

# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=/Users/linyou/Developer/doudizhu/chengxu/resource/cocos2d-x/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH
//cocos2dx的命令行工具cocos。在终端执行:cocos -h帮助

# Add environment variable COCOS_X_ROOT for cocos2d-x
export COCOS_X_ROOT=/Users/linyou/Developer/doudizhu/chengxu/resource
export PATH=$COCOS_X_ROOT:$PATH
//cocos2dx所在根目录

# Add environment variable COCOS_TEMPLATES_ROOT for cocos2d-x
export COCOS_TEMPLATES_ROOT=/Users/linyou/Developer/doudizhu/chengxu/resource/cocos2d-x/templates
export PATH=$COCOS_TEMPLATES_ROOT:$PATH
//cocos2dx创建新工程时,所用到的模版文件。

# Add environment variable NDK_ROOT for cocos2d-x
#export NDK_ROOT=/Volumes/harddisk/soft/android/ndk/android-ndk-r10e
export NDK_ROOT=/Users/linyou/Documents/adt-bundle-mac/android-ndk-r10e
export PATH=$NDK_ROOT:$PATH
//配置安卓NDK环境。这里使用的NDK版本是android-ndk-r10e

# Add environment variable ANDROID_SDK_ROOT for cocos2d-x
export ANDROID_SDK_ROOT=/Users/linyou/Documents/adt-bundle-mac/sdk
export PATH=$ANDROID_SDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH
//配置安卓SDK环境。

测试安装是否成功

cocos -h

如果命令有反应,说明安装成功。如果找不到命令,缺少子模块。执行命令git submodule update --init进行下载。

四、体验cocos2dx的测试demo。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第20张图片

目的:在开发过程中,遇到想要做的功能不会做,就看这个demo,然后找到它的源代码,对该功能进行快速了解学习。

用finder打开doudizhu/chengxu/resource/cocos2d-x/build文件夹,打开cocos2d_tests.xcodeproj测试demo,体验cocos2dx的demo,了解可以用cocos2dx开发什么功能,做到心里有数,不需要在网上找教程。

零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第21张图片
零基础使用cocos2dx-lua和skynet全栈式开发网游三(客户端配置)_第22张图片

以上图片来源网络搜索,若有侵权,请告知,立马卸载
个人开发者,若有软件外包,请联系我,QQ:743712205
技术讨论群:277615647


你可能感兴趣的:(网游开发)