cocos引擎不可不知的基础概念1

  • 在此仅想进行一个概括性的总结,将这些经验和大家一起分享,有问题的地方也忘各路大神能指点一下。这不是一个教程,也不是代码层面的分享,这是一个系列的总结。只想通过“深入浅出”的方式和大家分享,因此最近的学习中,发现只有把一类问题深入到某种程度才能有更全面的理解。
  • 复杂的东西要理清楚思路就需要简化,在这里我的思路是分几个模块进行总结,每一个模块的总结都在能力之内深入的挖掘,相信这样做能有更大的收获。
  • 整个内容分为三个主题:跨平台、图形学、引擎类结构、物理引擎和引擎架构,每一个主题也都会去搜集资料、论证并总结,在总结较为模糊、错误和不完整的主题中,希望能有朋友毫不留情的指出,我会好好整改。
  • 最后,由于能力有限,此文紧提供参考,最大的价值也仅仅是普及游戏开发中的一些常识并能快速大致地去理解各类分支,方便后续学习。无论是哪一个主题,都是一门复杂的学问,想掌握牢靠,还需要系统的去学习。

:非phoneGap打包方式、本地编译后打包方式所生成的移动端应用程序,为简便语言,我们统一在此叫native。

那么从最初的地方看起。
为什么cocos2d-x那么多人用?
因为它能跨平台,开发成本低,学习门槛低,引擎结构通俗易懂….等等。通过上面的回答,我们就能找到最为重要的因素:跨平台。

1.为什么cocos2d-x能够跨平台?

在回答这个问题之前,我们要确定什么是跨平台。
目前普通的概念有两个:第一种解释是web开发,意思运行程序在所有设备上的浏览器上运行。另一种是正确意义上的跨平台,也就是一套代码通过“完美的解决方案”能在所有本地机器上编译运行(例如QT跨平台图形应用程序开发框架)。
因此,对于cocos2d-x来说无疑是第二种了,cocos2d-x通过不同平台使用不同实现的方式实现了跨平台的能力。观察cocos2d-x里的源代码,我们经常能看见非常多的“宏定义”,这些宏定义里面,有非常多的代码是用于“平台判断”的。这些宏定义实现了“条件编译”,也就是满足某个条件下,代码块参与编译,否则被忽略。因此,我们使用cocos2d-x能够跨平台,同样的cocos2d-x API但是在特殊的系统下,其实现不同,以这个为基础,再加上各平台的基本运行代码。
但是许多朋友有个疑问,Android明明是用Java开发的,IOS是用Object-c开发的,cocos2d-x只是在C/C++实现不同的逻辑,有什么用呢?其实,C/C++是可以直接开发Android应用的,最根本的原因是因为Android本身就是基于Linux的,而且Android内部核心库的实现也是使用C/C++ ,而同时,苹果系统一直都是允许混合编译C/C++、Object-c代码的。(JNI)
游戏引擎最核心的功能是图形的渲染,帮助引擎实现这一功能的,也是真正让引擎达到跨平台的是OpenGL ES,跨平台图形API。使用它进行图形处理,无需担心平台不同会有多大的差异。

2.cocos2d-x和cocos2d-js(html5)有什么区别?

答:情况不同,区别也不同,但任何一个版本,游戏引擎的所有机制是一样的(实现方式不一样罢了)。cocos2d-x是基于C++语言的跨平台游戏引擎,最初只有C++版本,Lua和Js版本都没有,可游戏开发不同于其他软件开发,游戏的逻辑性太复杂,特别是对于大型项目,复杂的逻辑如果再使用相对复杂的语言,这种生产效率是非常低下的。因此,很快Lua就能在cocos2d-x引擎中使用了。于是大量的团队开始转入Lua阵营,放弃使用复杂语言概念的C++来开发游戏,特别是做MMO的团队,系统复杂度较高。可是问题来了,Lua脚本并不完善,连最基本的C++上的API都没有完整的“搬运过来”,当然这不能怪引擎团队,本来就是一个在成长过程中的引擎和引擎团队,于是这些做Lua团队的先行者们的支持下,衍生出来了Quick-cocos2d-Lua版本(一开始只是帮大家在Lua上移植和封装引擎功能,后来被cocos2d-x收编了)。Lua是游戏开发中公认的好脚本,但为什么cocos大力的在做cocos2d-js呢?这个问题我回答不上来,目前还只是一枚小程序员,但我个人觉得是由于Html5的关系,大家都知道html5是web上非常重大的突破,如果引擎能做到任何平台都能运行,包括html5,那么不是非常完美?此时不选javascript,那还能选谁?
这个时候问题来了!cocos2d-js为什么可以运行在web上,还可以运行在native中?运行在web上,无可厚非,这就是javascript该做的事情,web就是它的天地。但是在native 中呢?有些朋友没有经历过使用Lua的时期,也基于以往工作于非Native的环境中,所以体会不到javascript是如何在native中运行的。在native中,脚本只是一种特殊的文本罢了,没有任何意义,但通过一个脚本引擎就能够指挥着本地语言去执行命令。脚本语言有非常多,Lua和Javascript只是其中两种,那么引擎如何知道是要给本地语言C++发送什么命令?这当然需要“翻译”把脚本的意思传达给C++,于是我们可以用脚本写逻辑,但最终执行的是C++程序。Lua的翻译者是Lua-Binding,Javascript的翻译者是SpiderMonkey。
最后总结一下这些区别:
(1)cocos2d-x是基于C++的,并且支持Lua开发。效率高,无法开发web版本。由于C++版本没有脚本运行的开销,所以C++版本运行效率是最高的。
(2) js版本 使用js语言对引擎有自己的一套封装。当发布到web时,使用web的一套渲染方式(canvas/webgl),当发布到native时,js就只脚本资源。js版本包括了C++版本。

3.如何开发web/native跨平台应用?

答:首先说一下区别:
(1)web和native渲染方式不一样
(2)web和native管理资源方式不一样
其实这两种区别足已很头疼了。因此在native版本开发中所有使用OpenGL特有API的地方都要有平台相关性判断,web上特有的object对象的使用也要有平台相关判断,资源加载比较麻烦,web上要自己封装好异步加载等。所以在写这类跨平台开发游戏的时候,不要用这些“特殊”功能,用最简约的代码实现功能和表现。然后在发布不同平台的时候,不同平台不同修改。

(完善中…)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是