在嵌入式领域
现如今的硬件比以前已经有很大的进步了,存储器的容量也很大,这时候我们就可以使用C++来编写更为复杂的实时程序。
在游戏开发领域
市面上相当多的游戏引擎都是基于c++开发的,比如Cocos2d、虚幻4等,这些游戏引擎的代表作有失落的方舟、绝地求生、地狱之刃、中国象棋、雷电传说、俄罗斯方块、保卫萝卜、捕鱼达人、开心消消乐等等。
在三维游戏领域
三维游戏领域的计算量是十分庞大的,底层的数学全都是矩阵变换,要想画面精美、内容丰富、游戏的实时高,这些高难度需求让我们只能选择C++语言。C语言是面向过程变成的,编写像游戏那样的大型软件很吃力,这时候C++就比C更适合编程。制作好莱坞大片的软件无一例外都是C++编写。这几年火爆的的VR领域,也是C++编程的天下。
打遍天下无敌手的AlphaGo
我们之前看新闻知道Google的AlphaGo下围棋的水平已经是我们人类所达不到了。其背后也是用C++和神经网络编写的。在人工智能这个领域,Python和C++已经成为主流工具
在虚拟现实领域
虚拟现实(VR)是一种可以创建和体验虚拟世界的计算机仿真系统,是利用计算机生成的一种实时动态的三维立体逼真图像,结合VR眼镜,可以在观影、游戏、旅游活动、教学等方面给人一种完美的沉浸体验。C++在这一技术中同样扮演着重要的角色。
在数字图像处理领域:比如OpenCV视觉识别技术。
在网络软件领域:C++拥有大量成熟的用于网络通信的库,ACE是其中最具有代表性的跨平台库,在许多重要的企业部门甚至是军方都有应用。
在科学计算领域:在科学计算领域,FORTRAN是使用最多的语言之一。但是C++凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。
在 *** 作系统领域: *** 作系统主要使用的编程语言是C,但是C++凭借其对C的兼容性,面向对象性质也开始在该领域有一席之地。
如果大型游戏,强烈建议不要使用cocos2d-js
我们目前的几个项目都是cocos2d-js开发的,我打算把这几个项目转egret。有如下几个理由:
1、cocos ide有BUG:断点会崩溃、代码提示很差、内存太高、虚拟机的菜单栏会影响事件(迭代了很多版本,这菜单栏BUG都没修复)
2、studio的工作流在几个引擎中是最差的,而且有BUG。经常和实际表现不一致。而且内存占用大,会崩溃。不能继承(这个问题最严重,不能继承按钮,那么按下缩放等高级功能就很蛋疼)。
3、
架构太差。写点小功能没事,如果想写大型游戏,这套架构会让你抓狂!比如最简单的按钮事件,我必须在事件方法里面加个触摸类型判断。一个很简单的点击,就
多出很多这种相似的代码!4、UI有好几套,然而每一套都有BUG。CCUI的设计也是很糟糕的!同时也是崩溃的罪魁祸首。
5、引擎BUG问题,
很多BUG会让你欲哭无泪,比如坐标会出现undefined。再比如热更新的BUG,XCODE编出的包默认是js而不是jsc,当这个包发布商店就会
出现不能热更新的问题,同时也进不去游戏,卡在了热更新界面。(这个问题导致我们流失了3个月的用户,知道苹果商店通过审核位置),再比如
java/objectc和js的交互,这个都有问题!再比如:ios第三方输入法会导致崩溃!
6、工作流问题,IDE的断点的观察变量很不友好、studio导出的配置很大、studio扩展性很差。在IDE 12版本出来之前,我们团队甚至无法断点,只能打印日志来debug。
7、工作效率问题,代码提示先不谈。我实现一个简单的列表都能折腾很久,那ccui的list真是太不好用!除此之外,裁剪、遮罩这些只需要一行的代码,在cocos下面需要无数行!
8、
引擎升级问题:cocos大概一个月1个升级,egret是2周。然而cocos升级会带来大量的新BUG,而且兼容性很差。导致我们现在还用30版
本。最蛋疼的是,官方的36版本又不能断点了!30升级到36还会导致布局混乱、九宫失效、崩溃闪退(绝对不是代码问题这个解释了)!基本上
cocos每加个新功能都会带来无数新BUG,老BUG修复量也少,我论坛反馈的问题经常需要迭代2到3个版本才修复,下个版本修复兼职是不可能。而
egret不仅迭代快,BUG修复也勤快!也很少有一些导致产品质量的验证BUG。
9、官方人员态度问题:我在cocos论坛发的BUG反馈,过了7天才有人来回复。地址(从30到31和32的BUG,官方帮忙看下),再看下egret我发的BUG反馈,当时是下班时间,然而第二天一早就回复我了。地址(Egret社区-BUG列表)
10、API问题:cocos经历了3个大版本,官方API文档也有的API,实际尽然是没有的,官方回复是还没加入js绑定。
11、跨平台问题:cocos2d-js经常是HTML5和JSB表现不一致。导致我们现在只能专注JSB而放弃HTML5版本。egret很少有这个问题。
12、
性能问题:先抛开runtime。如果你用了ccui,那么我100%保证你的cocos2d-js的性能会被egret秒杀。再来说下native下面
的性能对比,cocos的人说egret是js写的逻辑,而他们是绑定。那么问题来了,在现在,js的逻辑产生的性能压力一点都不是问题(参考
nodejs,能用js写服务器了都)。主要的性能压力其实是在渲染上面,而他们2个都是opengl作为渲染的。如果用了ccui,那么还是被
egret秒杀。那ccui带来的drawCall真是太!!再来谈runtime,egret现在很多浏览器都集成了runtime(可以opengl
渲染代替canvas渲染),而cocos-js只是说在合作,已经慢了一步。
13、产品路线图问题:cocos的几个产品一心在弄3D,egret都已经自己搞了一个IDE了。开发基本的生活cocos都没保障好,就去想和u3d打架!
14、内部问题:cocos估计内部很不和谐,ide据说是1个人在开发,studio是30个人(30个人整出这东西),而且studio是用的NET搞的,跨平台最呵呵的技术!QT、AIR那些那么多高效率,扩展性强的技术不用,选了个NET。。。。
---------------------------------------------------------------------------------------------------------------------------------
题
外话:说了那么多cocos的不是,我也曾试着爱过它,我甚至开发了一个和egret
wing一样的UI编辑器,写了个和Flash/Flex一样的API(egret用的这套,这种架构很好用,简单明了)。其中UI编辑器还加上了
unity3d那种绑定脚本的功能。然而因为cocos底层的一些令人发狂的BUG,我最终是放弃了。有egret这个车子在,我还造什么轮子?我打算把
手里头的这套cocos的东西开源。然后去整egret去!
---------------------------------------------------------------------------------------------------------------------------------
再来个题外话:
游戏引擎cocos2d-js和egret 对比
这
个是百度搜索第一的对比,里面说cocos2d的工具比egret多,我不否认,但是能用的基本没有。而egret的工具很稳定。就拿最简单的骨骼动
画,cocos连龙骨都不支持,studio里面的骨骼设计也是坑的不行,egret的骨骼设计工具从界面和实用性都已经完爆studio了!
再来说上面的地址里面的成功产品:捕鱼达人、DOTA传奇、我叫MT那都是cocos2dx写的,和js版本一点关系都没有!请问你有见过网页版的刀塔传奇么?
上面的开发语言对比,大项目来说,ts真的是完爆js!js那不小心就会出错真心不适合大项目,不然微软不会造这个轮子。
上面的参考资料对比,cocos2d-js的文档连参数的注释都没,和c++文档作参考也不行,很多参数是不一致的!而egret在开发工具里面就继承了中文的帮助。
从目前状况看,今年绝对是egret产品井喷的一年,不信走着瞧!cocos真是把我坑惨了!
---------------------------------------------------------------------------------------------------------------------------------
再
次申明,请拿cocos2d-js或者JSB的大作出来,不用拿2dx的东西。说到2dx,你们再去了解下,榜单上,有几个人是没改过引擎源码的,有几个
游戏能随着cocos引擎升级而升级。用studio的又有几个。并不想和王哲斯逼,只是希望你们能正视BUG,提高体验。如果好,我们团队会考虑
cocos技术的,否则只能用egret和unity3d了。我说cocos这么多不是,也是希望他成长,能给开发者带来更多利益,带来更多方便,而不是
各种无厘头的问题,各种蹩脚的手段去开发。还有,我说的这几点,@王哲
你接招,如果我不说出这些BUG,这些问题,那么估计还不一定改。egret同样有个人叫王泽,然而他的理念完全当我们开发者是用户,提高开发体验,这个
很重要的。
如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作、先打下哪些基础呢
首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类专业一般都会开设C语言课程,只是很多同学在大学期间并没有好好学习,如果对它掌握的不太好或者很久没用了,建议先从将其好好复习一下,将其基本的语法再好好回顾一下,最好能搭建一个环境来运行、调试它。如果没有学过,不妨也提前学习一下,可以参考清华大学出版社出版的谭浩强老师的《C语言程序设计》,推荐这本书的原因,一是它已经经过了多年的考验,应该说还是比较严谨的;其次就是大部分的高校所开设的C语言使用的教材都是用它作为教材,因此无论是购买还是借阅,都容易找到。另外,华清远见网站上也有一些这方面的教学视频,可以结合来看。
其次,如果你后续有志于游戏方面的开发,你最好具备一定的数据结构和算法基础知识。这一点是我在华清远见的讲台上,给学员们坚持强调的。虽然现代的高级编程语言中,其类库中已经帮我们实现了大部分的数据结构,一般情况下,我们直接使用即可。但如果你能对其原理有所了解,当你需要在这些数据结构和算法中间的时候,你可以能更加的清楚到底应该选择那个数据结构或者算法。另外,在图形图像处理上面,线性代数的作用也非常重要,如果能掌握一点这方面的基础知识,无疑也会在后续的学习中如虎添翼。举个例子,在Android中,有一个用于图形变换的类Matrix,用起来稍有点难。其实它的理论基础就是线性代数中的矩阵,如果你了解矩阵的基本算法,这个类的使用可以说就易如反掌了。
第三,因为Android应用的开发语言用的是Java语言,并且在Android中也用到了Java核心类库的大量的类,因此,在学习Android开发之前,可以先把Java基本语法和Java SE的基础类库好好学习一下,例如:Java中的IO、网络、线程、List、Map、Tree等数据结构。现在的大学里也有不少的院系开设了Java课程,教材和图书也非常丰富,如果你所在的院系没有开设,也可以从其他开设了这个专业的院系同学那里借阅一下,并认真完成他们所布置的作业,争取自己能动手编写出一些简单的Java应用。如果自己购买图书,可以购买《Java核心技术,卷1(原书第8版)》这本图书来学习。
第四,因为在Android中,会用到数据库来存储数据,因此,也可以提前对数据库知识做相关的储备。在Android所使用的SQLite中,其语法是遵循标准的SQL-92语法的(当然和企业级数据库如Oracle等比较,功能上要弱很多),有条件的话,最好也能安装一个数据库来进行实际的 *** 作。从易用性和资料完备性来说,建议大家使用Microsoft SQL Server或者MySQL就可以了。它们都是我们学习数据库的好平台。另外,如果曾经学习过数据库原理或者关系代数,那么,在学习数据库的过程中,也可以再好好地复习一下这些基础知识,对我们理解数据库大有裨益。
最后,我们结合华清远见3G学院的“3G Android系统开发就业培训班课程体系”来谈谈Android开发的学习方法。
Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大。因此,一个好的学习方法对我们学习Android开发很重要。因此在华清远见的课程体系设计中采取了循序渐进、将大目标分解成多个小目标,逐步达成对Android开发从应用层到底层系统及驱动开发全面掌握的目的。
例如,可以先从Android的应用开发开始,等到对应用掌握的比较熟悉了,开始慢慢阅读一些Android 应用框架层的源代码,然后再渐渐往下去了解Android的JNI、Libraries、Dalvik虚拟机、HAL层、硬件驱动、Linux内核、ARM技术体系架构等,虽然近期Intel宣称要让Intel芯片支持Android系统,但在可预见的时期内,在移动设备上,ARM的优势应该还是不可撼动的。
具体来说,可以先通过在开发板上构建一个自己的Android系统,了解Android系统的整体架构和启动过程,由此先对Android有一个初步的了解;接下来,学习Android的应用开发,在这里可以先学习Android的几个主要组件、UI组件,先对Android应用开发有一个感性认识。在能够熟练搭建用户界面后,再逐渐来丰富应用的功能,例如:加上事件处理,使其能够和用户互动;加上数据存储功能;加上联网功能等等。在学完应用后,在此基础上来学习游戏编程,先了解游戏设计的基本思路,然后开始从小的游戏、小的模块开始做起,到最后能完成一个类似于现在热门的《捕鱼达人》这样的游戏。在掌握了这些应用层级的内容后,可以去了解如何在Android应用中通过JNI去调用C/C++的接口,再往下学习Linux的内核和驱动开发如字符设备驱动、Flash设备驱动、网络设备驱动等等;再在此基础上,去学习Android驱动开发、HAL(硬件抽象层)开发、ARM体系架构和指令等等内容,这样,Android开发的整个体系就都贯穿起来了。
当然,因为时间有限,而底层部分的内容比较庞杂,因此,在真正去做这部分工作之前,我们只需要对其基本原理有所了解,做好相关知识的储备,能够根据老师的指导来完成相关的实验。这样在后续的工作中,就可以方便的往这方面发展,让自己的事业更上一层楼。
一、3D游戏(包含25D)
只能:Unity3D
作品:职业棒球、星际陆战队等
分布:欧美国家用Unity3D的较多。商业化引擎中,3D游戏占比最高
原因:
就像 @朱云所说。Cocos2d-x目前还不支持3D。相比而言,U3D就是你唯一的选择了。
二、大型2D游戏(可以指安装包上百兆的)
推荐:Unity3D
作品:捣蛋猪、冰雪奇缘、天天飞车、绝代双骄等
分布:欧美国家用Unity3D的较多,国内用Cocos2D-X的多
原因:
1、游戏这东西,就是要跟“直觉”打交道的
我的想法有点极端,我感觉在游戏世界里,代码似乎更像是“妥协”的产物。
如果能做到“所见即所玩”,那真的是一个非常惬意的事。到时候,或许一个8岁小孩就能独立自主的开发一款游戏。
而这一点,Unity3D的王者地位,当之无愧!
2、Unity3D提供了超赞的设计工具,让你感觉像是在用3DMax和Flash来做游戏
3、适合大型团队,美工、动画更容易上手
U3D可以让美工、动画、码农在同一个平台上各司其职。这点从目前来看,Cocos2D-X望尘莫及。
三、中小型2D游戏(百兆以内的)
推荐:Cocos2D-X
作品:捕鱼达人、我叫MT、2048等
分布:东亚游戏多出自Cocos2D-X,尤其中国。但大多为小型游戏
原因:
1、Unity3D比Cocos2D-X的APK包要大了近十倍
仅以Android手机为例,同样的一个2D版HelloWorld,两者的安装包大小:
Unity3D:约为927M
Cocos2D-x:约为167M
解开包后发现,里面除了两个一共占据近12M的SO库(libmonoso和libunityso),还有一票的DLL文件。其中Systemdll、Assembly-CSharpdll和mscorlibdll这三个核心文件就占了5M。虽然它们压缩比约为50%,但仅这些文件就占了这么多。心疼啊。
而这,在“寸土寸金”的中小型游戏面前是多么可怕的数字。
2、Cocos2D-X比Unity3D快很多
即使不用测试工具,也可以轻易的发现这一点。
主要因为Unity3D用了Mono架构,它移植自微软的Net。每次启动都会加载Mono框架和Unity3D引擎,再加载Net Assembly(一堆DLL文件),这可比Cocos2D-x这种纯C++(包括Lua和JS)实现要慢很多。
3、独立开发者更喜欢“码”游戏
独立开发者大多是“技术达人”(不然怎么开发游戏)。U3D会让他们有“无所适从”感,从而影响了对U3D的灵活运用。对这些人而言,这是赤裸裸的时间成本。在游戏开发中,这点尤为重要。还是Cocos2D-X让他们更感到“亲切”,更有成就感。
也许你会问:“你怎么知道?”
因为我就是搞技术的。
4、中国游戏多出自Cocos2D-X
Cocos2D-X是正宗国产货,又是优秀的开源项目,国外用户群也不少。
也正是因为这个原因,C2D天生就对中国用户很“偏爱”。比如社区,我在上面问了两个问题,基本上当天问当天答,而且非常热心。从这一点我就对C2D产生了不错的好感。
5、Unity3D要收费
对大型2D游戏团队来说或许还不算什么。
初步算一下,Pro要1500$,手游怎么至少也得兼容iOS和Android吧,各自1500$,再加个Team套装,加一块儿,5000$,两万多银子。
Cocos2D-X免费、开源。遇到问题可以研究源码或向社区求救。
四、微型游戏(指争取安装包在1M以内的)
推荐:AndEngine、Cocos2D-iPhone
作品:Flappy Bird、小球快跑、五子棋等
分布:不需要跨平台的超小游戏用的多。
原因:
如果只想在一个平台上开发游戏,无疑上述两种是最好的选择
其中AndEngine开发出来的游戏最小才400多KB,大名鼎鼎的Flappy Bird就是用它做出来的。
另外,iPhone的Cocos2D划到这里似乎不太合适,但仔细想想,现在有更成熟的Cocos2d-x方案,Cocos2D划到微型游戏一列,相信是早晚的事(个人看法,轻拍)。
五、总结
1、Unity3D:如果你需要开发大型游戏,或需要开发3D游戏的,请选这个。
2、Cocos2D-x:如果你开发的是中小型游戏,对安装包大小比较在意的,请选这个。
3、Andengine、Cocos2D-iPhone:如果你只为开发单平台游戏,又非常在意速度和安装包大小,请选这个。
最后。俗话说:没有最好的,只有最适合自己的。我想这句话同样适用于开发游戏。
转载自知乎张炅轩。
一、Unity 3D
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
代表作游戏:
诛仙
极限摩托车2 (Trial Xtreme 2)
择天记
王者荣耀
神庙逃亡2(Temple Run 2)
神庙逃亡:勇敢传说(Temple Run:Brave)
纪念碑谷(Monument Valley)
仙剑奇侠传6
二、虚幻引擎
虚幻引擎的设计目的非常明确,每个方面都具有较高的易用性,尤其侧重于数据生成和程序编写的方面,这样,美工只需要程序员的很少量的协助,就能尽可能多地开发游戏的数据资源,并且这个过程是在完全可视化环境中完成的,实际 *** 作非常便利。
代表作游戏:
《绝地求生》(PLAYERUNKNOWN’S BATTLEGROUNDS)
《堡垒之夜》(Fortnight)
三、Cry Engine 3
Cry Engine3,是德国的CRYTEK公司出品一款对应最 新技术DirectX11的游戏引擎。2001年引入的这个“沙盒”是全球首款”所见即所玩”(WYSIWYP)游戏编辑器,现已发展到第三代,WYSIWYP功能将提升到一个全新层次,并扩展到了PS3和X360平台上,允许实时创作跨平台游戏,另外工具包内的创作工具和开发效率也都得到了全面增强。
代表作游戏:
《末日之战(Crysis)》
《战争前线》
四、白鹭(Egret)
Egret是一套完整的HTML5游戏开发解决方案。Egret中包含多个工具以及项目。Egret Engine是一个基于Type语言开发的HTML5游戏引擎,该项目在BSD许可证下发布。用Egret Engine开发的游戏可发布为HTML5版本,运行于浏览器之中。同时,也可以发布为iOS、Android和WindowsPhone原生程序。
五、Cocos 2D
Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等 *** 作系统中。
代表作游戏:
刀塔传奇
捕鱼达人
开心消消乐
1,你说的这个就是有的啊,我前段时间用应用宝找东西的时候就见了,你玩的话可以自己看下,2,然后就是弄这个软件啥的也是挺多的,你要是玩的话可以自己直接弄下也挺省事的呢!3,打开之后就是能直接玩的,也挺省事的
如果是全新的ARM,而且用的是NAND FLASH,那你就需要用JTAG线,PC端使用你自己写的SJF工具(SJF源码网上有,但你要根据自己的硬件配置做些修改,如RAM芯片,FLASH芯片等)将bootloader下载到FLASH的前4K,上电后,ARM会自动将FLASH的4K读到RAM中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)