c+缂栫▼鑷瀹濆吀 (鐜╄浆c++鍐呮牳)

学习C++建议

C/C++的优势:差不多一切现代编程言语都脱胎于C/C++,因而了解了C/C++,就了解了关于编程言语的一切,十分有利于快速学习其他各类编程言语。

C/C++的不足:听说C/C++发明的时分为了进步入行门槛和行业收入水平故意制造了学习难度。

C/C++的优势:C/C++能够被嵌入任何现代处理器中,差不多一切操作体系都支持C/C++,跨渠道性十分好。

C/C++的不足:虽然C言语体型细巧,可最常运用的C++规模可观且具有许多极为杂乱的功能交互办法,简略形成资源浪费。

第一层次,C++根底:挑选一本入门书本,如《C++ Primer》、《C++大学教程》、或Stroustrup编撰的经典《C++程序规划言语》或他一年半前的新作《C++程序规划原理与实践》,而一般C++课程也止于此,其他《C++ 标准程序库》及《The C++ Standard Library Extensions》

第二层次,正确高效地运用C++:此层次开端有必要自修,阅览过《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++编程标准》等,才适宜踏入专业C++开发之路;

第三层次,了解C++:关于全局问题可读《深化探究C++对象模型》、《Imperfect C++》、《C++深思录》、《STL源码部析》,要挑战自我,可看关于模版及模版元编程的书本如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;

第四层次,研讨C++:阅览《C++言语的规划和演化》、《编程的本质》(含STL规划背面的数学根基)、C++标准文件《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。

由于我主要是应用C++,大约只停留于第二、三个层次。然而,C++只是软件开发的一环而已,单凭语言并不能应付业务和工程上的问题。建议不要强求几年内“彻底学会C++的知识”,到达第二层左右便从工作实战中汲取经验,有时间在慢慢继续学习更高层次的知识。虽然学习C++有难度,但也是相当有趣且有满足感的,同时小编推荐一个学C/C++的学习群655706150无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!群内有很多干货和技术分享!

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

C++与游戏开发

有关C++是否游戏开发者的必须技术。我觉得,这根本不是完全必须的,但很多游戏开发项目需要用C++。举个列子以下这些以前最流行的游戏平台

PC单机游戏(Windows)

PC网络游戏(Windows、Linux)

移动平台游戏(J2ME、Symbian、Palm……)

家用游戏机游戏(PS1/2/3/4、XBox、Wii……)

掌上游戏机游戏(GB、GBA、NDS、PSP……)

网页游戏(HTML、Flash)

智能移动设备游戏(iOS、Android)

我们会发现,除了J2ME和网页游戏外,大部分的平台都支持或只支持原生编程。而原生编程最常用的就是C/C++和汇编。这种现象并不难解译:是否选择C++哪些程序合适使用C++?

但C++并不是万能的,按我的经验举出一些C++的适当的时机。C++适合构造程序中需求较稳定的部分,需求变化较大的部分可使用脚本语言;程序须尽量发挥硬件的最高性能,且性能瓶颈在于CPU和内存;程序必须要频繁地与操作系统或硬件沟通;程序必须使用C++框架/库,如大部分游戏引擎(如Unreal/Source)及中间件(如Havok/FMOD),虽然有些C++库提供其他语言的绑定,但通常原生的API性能最好、最新;项目中某个目标平台只提供C++编译器的支持。按应用领域来说,C++适用于开发服务器软件、桌面应用、游戏、实时系统、高性能计算、嵌入式系统等。很大程度上,游戏──或说游戏引擎,都是C++非常适合的应用时机。好多人认为,游戏开发者使用现成的引擎,就不需要使用C++了。过往,业界有一个普遍常识,就是用C++开发游戏引擎,而游戏引擎提供脚本引擎供编写游戏逻辑代码。但这个观点被Unreal Engine的决策改变,UE4放弃了维护多年且被大量使用的UnrealScript脚本语言,而改用原生C++作为游戏逻辑编程的语言。此决策背后有多个原因。

除了自行研发游戏引擎需要使用C++,我们可以看到,大部分游戏引擎都提供了其C++原代码(Unity算是例外),这让我们可以更方便调试游戏深度剖析、优化游戏的性能,为引擎扩展新功能修改现有引擎以适应项目所需在专业的游戏开发中,这些都是很常见的工作任务。所以,即使并非自研引擎,并使用脚本语言开发游戏逻辑,也有很多机会需要使用C++。最后,还需学习什么是一个很难简单回答的问题,因为游戏开发涉及的知识面很广。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

A.如果你是想从事游戏行业当个民工打打杂一辈子就这样过着, 这种太依赖IDE和游戏引擎所谓速成方式,到最后只能是二流的民工,打杂的,混饭吃的。知道其然,不知道其所以然。遇到真正的专业性问题就卡壳了,比如如何优化渲染质量之类的问题。或者开发的项目就是那种2D的小儿科,或者山寨跟风赶进度赶上市的快餐游戏,而不是画质精美,设计精良,堪称经典,为国产游戏长脸,推动全球游戏业界发展的革命性大作。

B.如果你是志向高远,想制作出改变世界的革命*游戏性**,或者推动游戏产业的发展,成为游戏开发业界top 1%的技术领军人物。请熟练C++,就算你的志向是开发crysis这样的游戏,其实也只需要用到C++的一小部分就够了。C++各种范式是发明来解决所有问题的,游戏只是其中的冰山一角,你没必要精通,没必要学会C++的所有部分。我们这里所说的,是了解原理,学C++只是其中的一小部分,与其说去不断的学C++的更多高级特性,更好的学习方向是熟练利用C++配合DirectX或者OpenGL来制作Windows小游戏,对数据结构设计模式有一定的认识,且能够准确针对问题选择你的数据结构,研习计算机图形学blablabla的。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

如果想一直做编程,请别忘了学习c++,

因为它可以给你认识到什么是编程,让你懂得更多计算机编程思想,以后就算不写c++也可以迅速了解别的语言,别的工具的而不是变成依靠IDE工具,不是随便抄抄别人代码,完成山寨程序的It民工。那些不懂原理只是挑一个工具熟练掌握使用或许在当前游戏市场火热的背景下也能混得不错,但是感觉很快会遇到职业瓶颈。这对自身而言就是一种风险。如果一项技能你学三个月就能耍通常意味着可以轻易找到一个人代替你

大方向的话,如果你是图形程序员,那么最好的项目就是,自己做一个游戏引擎,如果你是Gameplay Programmer,那么最好的项目就是,自己做一个游戏项目。另外,,“还是那个问题,是选择偏向游戏(文艺方向,独立开发),还是想做好技术,引擎开发,技术研究,打工,这个可能是大部分人的归路。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

游戏开发领域的两个方式

1独立开发者和小团队因为时间和精力的限制,大多是以实现为目的,这也是情有可言,以快速实现为目的,依赖工具、引擎。每个人切入这个行业的方法都不一样,能够选择最适合自己的入门方式那是最好。但是入门后如果想有更好和更长远的发展,,了解内部技术细节,浮于表面,依赖工具,而是要深钻进去,了解得越深越透彻越好。最好是能自己了解游戏引擎的底层原理,甚至是写出自己的游戏引擎来,这样才是更高的境界这样有趣,会有成就感,能快速得到成果,但容易遇到瓶颈,后劲不足,了解原理,作为稀缺的高水平人才资源,能有更多选择的权力,有更长远的发展。能找到自己的合适的方式就是最好。

2先学点C++,然后配合着C++学一些底层API(DirectX或OpenGL),能写一些比较炫酷的三维游戏场景,要不说自己实现一个小型的软引擎,再去真正地接触引擎,利用引擎做一点有趣的demo或者完整的游戏,读一些优秀开源引擎的源码(比如Ogre,irrilicht,Unreal Engine4,cryEngine),甚至自己实现引擎或者做游戏项目,这是重视技术的比较科学的方式,现在市面上所有画质精美的单机游戏比如:鬼泣5,上古卷轴5,刺客信条3,仙剑奇侠传5前传,古剑奇谭等等,所有的大型网络游戏:Dota2,英雄联盟,魔兽世界,龙之谷,剑灵等等,所有高性能的三维游戏引擎(虚幻Unity3D,Cry Engine3等等……),还有一些高性能的2D游戏引擎(Cocos2d-x等等),都是用C++来开发的。其实游戏引擎并没有那么难,也就是那么个事,用类封装好功能的C++代码而已。C++写出来的游戏引擎自然能跨平台。Unreal Engine3、Unity3D、Cocos2d-x等游戏引擎就是例子。学好C++,你可以亲手写出Unity3D,亲手写出Cocos2d-X,让别人都叫你大牛,别人都用你写的游戏引擎做游戏,等着你什么时候心情好了更新一下给引擎加更多功能;而不是人家怎么说,自己就跟着怎么做,都说Unity3D火,就去学Unity3D,明天说Cocos2d-x热门,就去学Cocos2d-x。你学游戏引擎,学的只是人家的某引擎.C++大神按心情来定的函数调用方式,学的只是如何调用一些别人写好的一些类,一些API函数。这样在别人规定给你的一些rule中固步自封,大家觉得有技术含量么?我们是时候该该想一想了,为什么现在全球范围内优秀的三维引擎,就是没有我们国产引擎的影子。

所以,无论是哪个平台,Windows也好,iOS也好,Android也罢,如果你真正想在游戏开发领域有所作为,混出个名堂,请学C++,请学计算机图形学,请了解计算机图形API(OpenGL或者DirectX),而不是在跟风某种“热门”的游戏引擎的大潮中随波逐流,在某种移动平台的游戏开发中迷信某某引擎,乐不思蜀,固步自封,无论是哪个平台(Windows,Play Station,Xbox,Android,iOS, WindowsPhone,WUII),在三维或者高性能游戏开发领域,确实就是C++的天下。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

关于站在大牛肩膀上的一些思考。

1.我们并不是说支持完全去从头造轮子,而是你理解的越深,就可以收放自如,做一个有选择权的强者。当没有合适你的轮子的时候,当遇到技术瓶颈的时候,你自己完全可以制造个更好的前所未有的轮子,而不是等待你所谓的巨人们心情好的时候施舍,造一个适合的轮子给你用,或者是因为一直以来太依赖工具而丧失了自己本来的能力。我所希望大家的是能做一个真正的明白人,心中有墨水,心中有底气,然后无所畏惧,遇到什么瓶颈都能快速找到原因解决。我们站在巨人的肩膀上的同时,不仅仅是靠业界巨人们写出来的库去实现自己的东西,而是可以理解与吸收巨人们的思维、技术和实现方法。当达到一定境界后,我们可以当下一个巨人,推动业界。这大概就是,强者与弱鸡,最外在的区别与表现形式。太依赖所谓的巨人们的肩膀,太依赖工具,就像井底之蛙,日复一日地调用让你崇拜的大神们写出来的类库,以为只要能做到这样就天下无敌了,以为就是软件行业的全部了——这大概就是目前,我们国内软件行业的误区所在吧!

2.能理解内部实现细节肯定是推崇的,这个看个人,早或者晚,但是越早越好。我写这个答案只是希望题主以及看到这个回答的朋友们能有更长远的眼界,立意更高远,能有更宽的视野,能知道更大的世界,而不是一辈子就这样炒炒现饭调用调用别人写的函数窝囊地就过去了。人的一生精力有限,作为一个聪明人,作为一个明白人,入门的时候什么方式越快越好,但是入门之后呢,如果希望自己有更好更大的发展,大方向千万不要错,不要过分依赖拘泥于工具,浮于表面,一定要跳出那个井,从井里爬出来,如果希望自己变得更强,不人云亦云随波逐流,最好的方式或许就是自己去理解细节,也并不是咬文嚼字地要自己真正花大工夫花精力去做一款引擎,这个量力而行。人的一生精力有限,没有哪条路哪种方法适用于所有人,但一个人只要能专注于自己认为值得事情,能自得其乐,那也是值得尊敬的。

3.直接用轮子,真实做出很好的东西出来,那也是值得尊敬的。当今游戏引擎的开展,为我们供给了前所未有的便利,我们能够直接用它,但千万不能太依靠他。但如果已经在某个领域花了10年乃至更长的时间,还没能有所突破,那就得检讨自己,是不是办法问题了,是不是方向问题了,是不是之前研习的时候,或进展太慢,仍是走了许多弯路。我们都清楚,并不是每个人都能有很好的技能天赋与根柢,当然也不是每个做游戏的人都要去理解和实现底层,要量力而行,要有所偏重,要找到自己最合适的视点。我们仅仅从长远来看发起将常识挖深,让自己翻开视野,不坐井观天,不趁波逐浪,让自己站得高看得远,有更多选择的权力。技能与构思,并不矛盾。人生在世,有所为,有所不为,游戏开发亦如此。

我也做了五年c++了,也不敢说精通,我们老大做了至少8年,也没敢说精通,我认识的很多大神,也都没敢说精通。事实上我认识的很多大神都很谦虚,我跟他们学到了很多,大家的简历上也都写着熟悉c++之类的字眼。即对于博大精深的C++,业界的大牛们穷其一生去研习都不敢言能精通它。就算是天天去钻研C++,也只能学个皮毛而已。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

你是愿意就这样学点皮毛混口饭吃随波逐流,还是成为真正的游戏开发业界顶尖技术大牛,推动业界的发展,去改变世界?在二十几岁这段人生可塑性最强的时光里,我们应该是满怀信心,志向高远,想让自己与这个急功近利、日渐扭曲世界有所不同的吧。

游戏开发不仅是技术,要发现更大的世界的话要开阔视野的话就不要沉迷于c++的技术细节啊。要做出有创意的与众不同的游戏,也是要靠快速实现游戏逻辑然后快速迭代,多跟策划沟通啊。如何快呢?就要在能够避开c++的地方尽量避开啊。c++还是很有用的,比如cocos2d-x目前还是很依赖c++;效率不够的地方也必须用c++来改写,以进行优化。不过以后随着硬件性能的提升,c++的应用范围会萎缩很多,只专注c++的程序员很容易被孤立的,空间会越来越小。c++更面向机器,更考虑运行效率,为了运行效率不得不牺牲可读性,大部分脚本在这方面就强得多,牺牲了运行效率换取了可读性。至于java, java的开发效率同样是被人骂得要死的,而且很少有人打算用java做游戏吧,哪个引擎支持?,游戏编程是编程中最小众的领域。你身边的同学可能有许多的人都会各种前台开发,后台开发或者ACM算法,但是做过游戏的人可以说用一个手掌就能数过来了。

接着,摆在面前的是两条不同的发展路线

Gameplay Programmer(游戏型程序员)

Graphics Programmer(图形程序员)

Gameplay程序员适合游戏策划紧密合作的一种程序员,他们会编写游戏中的主要逻辑,为策划提供关卡编辑工具,第一时间测试并玩到最新的游戏。由于Gameplay主要集中于游戏逻辑的编写,在这一块,我的经验是最好从使用一个游戏引擎开始,考虑到你的C++和程序员背景,推荐你使用Cocos2d-x这个游戏引擎,下面是这个引擎的网址。Cocos2d-x: World’s #1 Open Source Game Development Platform游戏逻辑部分,你需要理解游戏中的场景管理,资源管理,状态机,AI和网络这些模块的编写。具体的操作可以查看我的这个答案:学Cocos2d-x,需要掌握多少C++知识?大概学多久可以做出一个游戏?另一种是Graphics Programmer,或者说是Engine Programmer,他们是给程序员写程序的程序员(有点绕口啊=O=)。这部分你需要学习的是OpenGL和ORGE等等首先,你要学习的是OpenGL,首先我们要看的当然是这个红宝书了!OpenGL编程指南(原书第7版) (豆瓣)然后,就是读一些OGRE的源码了,国内的许多“自研引擎”就是通过ORGE做出来的,所以,作为一个Graphics Programmer读这个引擎的源码是非常必要的最后呢?我们不管是当那种程序员,我们最终都是要做出项目的。

如果你是图形程序员,那么最好的项目就是,自己做一个游戏引擎如果你是Gameplay Programmer,那么最好的项目j就是,自己做一个游戏项目

1、你完整阅读过C++ Primer 第五版之后的书,这本书可谓是C++程序员入门必读的书。(为什么我推荐第五版之后,因为第五版之后包涵的内容是C++11标准的内容,你现在重拾编程语言,那么推荐你看新的书)

2、你能够对面向对象编程有明确的概念。因为现在许多程序员用着面向对象语言,却做着面向过程的事情。

3、能够利用C++配合DirectX或者OpenGL来制作Windows小游戏。

4、对数据结构有一定的认识,能够准确针对问题选择你的数据结构。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

至于精通,精通发C++不仅是语法,还有编译的原理,那么又涉及到编译原理,还有计算机的组成原理。调试的时分,当你用release的调试,你又需求汇编语言的常识,又涉及到汇编语言。再后来你需求设计比较大型的程序,你要对数据结构,和设计模式有必定的知道。你想成为一个程序员,还是更想成为一个游戏开发者,游戏设计师或许仅仅喜爱游戏而想呆在这个圈子里,游戏是一个很大的产业,每个环节都是能够做到最大最强然后改动世界的,并且每个环节都是密不可分没有什么孰优孰劣的 ,我个人以为游戏设计重要的是,美工,设定,故事背景,营销和项目办理方面都是非常重要的环节,相比之下程序的重要性就没有想的那么重要。这也是为什么很多人以为不懂编程也能做游戏的原因。有的游戏比方卡牌游戏,不需求任何程序。另一方面,关于玩家来说,他们只知道好不好玩罢了,关于用的什么引擎,你c++写的多厉害根本都是没有直接影响的。比如说minecraft这样的游戏也没有用到高大上的引擎,dota这样风靡世界的游戏当初也是用的魔兽争霸编辑器那个自带的脚本编辑器完成的。另外涉及到游戏引擎的方面,也并不是如某些人所说,直接用别人的引擎的人全完没有技术含量了!

第一,为自己的游戏开发专用的游戏引擎其实也并没有那么困难,只是涉及到的知识和需要的编程技术基础比较高,而且通常没有绝对的必要性,所以做的人不多,就好像你想盖房子会自己去造吊车吗。所以以上说国内游戏开发不好是因为没有好的吊车其实是不对的。

第二,大家往往把游戏引擎和好的游戏画面关联在一起,但其实好的游戏画面并不由引擎决定,就好像photoshop是一个创建图片的工具,但是有的人能用ps创造出很好的作品,而有的人只能在哪瞎搞恶,同样的工具而最后产生的效果也可能是完全不同的效果。现在无论什么游戏引擎大部分都是基于当前已有的dx或者opengl图形渲染技术,就算某个引擎能够同时渲染更多的多边形,也不能说画面效果好,因为这些其实是取决于使用引擎的艺术家和技术美工的。当然如果一个游戏引擎的编辑工具非常的aritstfriendly,对于画面提神有很大的帮助。(于是问题便从开发游戏引擎变成了开发游戏引擎编辑工具)

第三,如何巧妙的利用游戏引擎也是一个非常有技术的事情,比如dota用的魔兽地图编辑器,弱到连让一个单位眩晕固定的秒数的功能都没有,所有的眩晕都是要靠创建一个隐藏的单位向敌人丢出一个隐藏的风暴之锤来实现的,即便如此,别人还是做出了一个非常成功的游戏。这样巧妙的利用一个引擎的各种功能,从而达到自己的设计目的,也是非常有技术含量的一件事情。在我眼里他们这些游戏程序员的工作并没有这些引擎程序员的工作低级,歧视他们的技术含量是可笑的。

另一方面,技能大部分的时候是因为需求而生的,比方我的游戏需求一个特别的作用然后可以过体现某种艺术作用,但现在的市面上的引擎没有这样的功用(比方我想要我的游戏里任何东西都和果冻一样,而且有物理的作用),那么这个时分娴熟C++编程才能就变得十分的重要,因为涉及到修正原引擎功用的二次开发往往是运用c++的,而且关于各种优化的要求适当的高。(当然如果做不到,那么巧妙的修正设计方案避开这是永久存在的处理的方法,当然成果也是这将使得游戏变得平凡)但是总的来说,花一年时间尽可能深化的学习c++是十分必要的,即便你往后不运用c++作为自己的编程工具。

c++是现在大部分编程言语的基础,了解这些细节关于往后快速掌握另一种言语也是非常有利的,我c++水平不是大神,但我也能做到在从来没有看过任何java/c#的书本的情况下看懂大段的java/C#代码而且自己写出常用的功能。如果真的想从事游戏行业,在学习c++之外更重要的是,你需求尽早初步着手做一个你想做的游戏,不论多差先做出原形来,不论用什么样的办法多落后,在中间你还会学到许多编程之外的东西。编程这个东西,一旦编程技术到达必定的水平,剩余的在编程言语之外的思想才是更重要的,就好像有的人写作的词汇特别的美,语法特别的对,但是内容空洞无力的话也是没有任何价值的。

鐜╄浆c++鍐呮牳,鑷c++缂栫▼鑹伴毦涔嬭矾

初入编程的建议

1. 在迷茫不定不知选择什么语言时,你,应该冷静下来思考一下哪个更适合自己,不要让把时间浪费在自己的犹豫上。

2. 不要攀比任何语言,就像每个人的每一种性格,在不同的环境下,可能是好的,也可能是坏的,你需要做的事,在对的时间对的地方用它。

3. 学习时最好看一本比较优秀的书籍,优秀的书可以帮助自己少走很多弯路,而且书里面的知识非常系统。不懂的地方,可以看一些相关视频,在视频中可能就会恍然大悟。

4. 关于英语由于大多数语言的母语都是英语,这就导致了一些初学者望而却步,但是英语对于编程很重要吗?实际上编程需要的英语很少,都是比较基础的词汇语法,它和一般的英语不一样,即使你连一篇英语文章都看不下去,但只要有点英语基础的,你就不用怕“不会”!不过,如果想提高自己,会英语肯定是很有好处,毕竟最新技术文档大多都是英文。

5. 重实践。学习中,好多人整天背概念,觉得看懂就行,但写起来到处是错或是根本无从下手,所以学习时要重实践。

6。许多初学者刚开始触摸编程就急着写一些高级的代码,却疏忽了最重要的基础,他们或许热情高涨,或许有心学编程,可是却没能静下心学编程基础,这将导致支付时候多而收成少的结果、“24小时学会XXX”!经历要靠练习来累积,不能只学理论,编程不是让你坐而论道的,平常不多练习,别想写出什么好程序!学习时要从简单的做起,先娴熟简略编程,在这个基础上要写出高级点的程序就不困难了,遇到难题别被吓着,尽力战胜它(除非是因为言语的局限性而做不到的),如果暂时做不出来,能够先搁一段时刻,但别把它忘了。等你学到更高一层的技术后,再回头研究过去的难题,将会事半功倍。

7. 勤学好问。有的人遇到难题,就放下了,正确的做法应该不懂就问。但是提问时,要会谦虚的提问,问题表述要足够清晰,能让别人一眼就看懂你问的是什么,然后虚心请教,提问是一种艺术,在提问中,自己也会学习到很多东西。

8. 合理规划,制定目标。我觉得制定短期目标,长期目标很重要,没有目标,很容易拖延,效率比较低。可以尝试每周一个或每天一个短期目标,每个月或每个季度一个中期目标,每年一个长期目标。

9. 爱分享,多交流。在交流中,经常会提交自己,把自己的作品分享出来,与别人交流,不知不觉中自己的能力就提高了。

10. 善于整理。把自己的电脑整理的干干净净,找资料会省好多时间,不知不觉中,自己的代码也会整洁。还有一些好的文章,可以整理到云笔记中,攻自己时刻拿来参考。