C加加和游戏开发那些事,告诉你怎么用C加加纵横游戏编程

C语言和C++

C 语言可以说是一门设计的非常成功的语言。但是C语言没有OOP的特性,在做一些大型项目的时候力不从心。一些大型的C项目,随着项目的臃肿,人类基本没办 法维护这个项目了。要维护这么庞大的项目而又不出错,只能加入一些OOP特性重构,有经验的C程序员写着写着,很多概念就类似C++了。干脆直接转C++ 算了。

c++ 和c相比,生产效率要高一点。虽然在一些商业游戏引擎中不使用stl自带的模版,但都实现了自己的一套模版库,甚至实现了自己的string库。如今的一 些商业3d引擎基本具备了跨平台的能力,但是由于不同平台的底层api(SIMD运算,文件读写,图形渲染)不一致,因此要对各平台/API的共有特性进 行抽象,这里c++比c更能胜任这样的任务。(利益相关:目前在学习swift+Metal)

目前,流行的unrealengine4是完全c++写的,unity3d 5虽然有用c#但在将来会通过il2cpp转换成c++,实现运行效率的提升。

编程最重要的是实践,就是写代码、看别人写的代码、再写代码,你看再多的书,不写代码,你还是不会编程。但是写代码也要讲究方法循序渐进,不能刚学了几天语法,就想写个操作系统什么的,树立这种不切实际的目标只会让你的自信受到严重打击迷失自我。同时小编推荐一个学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++适合构造程序中需求较稳定的部分,需求变化较大的部分可使用脚本语言;程序须尽量发挥硬件的最高性能,且性能瓶颈在于CPU和内存;程序须频繁地与操作系统或硬件沟通;程序必须使用C++框架/库,如大部分游戏引擎(如Unreal/Source)及中间件(如Havok/FMOD),虽然有些C++库提供其他语言的绑定,但通常原生的API性能最好、最新;项目中某个目标平台只提供C++编译器的支持。

按应用领域来说,C++适用于开发服务器软件、桌面应用、游戏、实时系统、高性能计算、嵌入式系统等。

很大程度上,游戏──或说游戏引擎,都是C++非常适合的应用时机。

一些人认为,游戏开发者使用现成的引擎,就不需要使用C++了。过往,业界有一个普遍常识,就是用C++开发游戏

引擎,而游戏引擎提供脚本引擎供编写游戏逻辑代码。但这个观点被Unreal Engine4的决策改变,UE4放弃了维护多年且被大量使用的UnrealScript脚本语言,而改用原生C++作为游戏逻辑编程的语言。此决策背后有多个原因,

但这里只想举出这例子展示C++在游戏开发中的用途及潮流,具体原因分析就不详细展开了。

除了自行研发游戏引擎需要使用C++,我们可以看到,大部分游戏引擎都提供了其C++原代码(Unity算是例外),这让我们可以

方便调试游戏

深度剖析、优化游戏的性能

为引擎扩展新功能

修改现有引擎以适应项目所需

在专业的游戏开发中,这些都是很常见的工作任务。所以,即使并非自研引擎,并使用脚本语言开发游戏逻辑,也有很多机会需要使用C++。

为什么那些引擎选择 C++

在游戏引擎的开发中有哪些功能、特性是可以通过 C++ 开发而不可以通过 C 的?C++虽然不完美,但是够用。它比C可读性好,做到了开发效率和运行效率的折中,是我写代码的首选语言。

其实并不是全部C++,最主要的架构核心部分C++而已,一个游戏引擎涉及到的内容超级庞大,又要搞效率高性能,又要好效果和易于扩展。高性能的关键核心代 码会使用汇编实现,比如SIMD指令进行各种浮点数学运算,高开发效率比如工具层,会使用脚本等来实现。而只有C++这样的全能语言才能做到在汇编和脚本 语言中间进行承上启下。

也就是说C++在游戏引擎中负责最主要的架构部分。

这部分包含了最重要的工程组织,从底层的基础库: 扩展std/boost数据结构,封装时间、IO/文件系统、多线程、反射、内存管理、数学库。。。。到中间层:窗口、游戏循环、输入设备/消息、图形渲 染接口层抽象、实时图形渲染管线设计、物理/碰撞检测、寻路、骨骼、动作、模型。。。。再到通用最上层的世界空间层次组织、天空盒、植被、水、粒子特效、 相机、。。。。

C++的开发效率肯定是高于C的,高一倍没压力,所以可以用省下来的开发时间去做性能优化。

一般来说,没有优化过的C++代码用 Profiling工具压榨出2~4倍的性能是很可能的。

而用C就算性能好,也没好到C++的3~4倍,好10~30%就不错了。

极端优化后的代码,C要好于C++,但是相同时间内开发出来的代码 C++性能会好于C,而且C++可读性可维护性要远远好于C。

的确没有什么不能通过C来做的。但C++更好。

因为游戏项目是个工程问题,关注开发效率。

而游戏引擎又是极端性能敏感的,关注执行效率。

这要求引擎程序有足够的弹性。可宏观分析,也可微观干预。

C++具有C简洁、直接和可移植的特性。

增加了语言层面的OO和一些良性范式。

在可控的资源损失前提下提高了生产力。

所以适合引擎开发。

C++学习建议

C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。学习C++大概可分为4个层次:

第一层次,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++游戏编程学习群:六二六八七一九一六,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2017最新的C/C++游戏编程和0基础入门教程,欢迎初学和进阶中的小伙伴

每天晚上20:00我都会开直播给大家分享C/C++游戏编程知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2017C/C++游戏编程学习教程),大家都是学习C/C++游戏编程的,或是转行,或是大学生,还有工作中想提升自己能力的C/C++党,如果你是正在学习C/C++游戏编程的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。

本文来自企鹅号 - 冷漠丶媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【答疑解惑第十讲】到底学哪种语言靠谱?

存在问题: 好多同学在初学编程的时候都会问,这么多编程语言都有啥特点,我该学什么语言呢?例如下面的这位同学: ? 解决方案: 下面就大致介绍下主流的编程语言。 ...

364140
来自专栏星流全栈

技术的执念

11440
来自专栏CSDN技术头条

Java 架构师最关键三个思维转变方式

很久没有写思维的文章,特别是在写完思维的逻辑和思维的框架后,对于理论层面的自己也不太想写。 但是对于实际案例层面的写起来又比较花时间,而且案例基本在IT专业领域...

47470
来自专栏Java架构

微服务是传统企业电商解决方案的银弹吗?

近几年,微服务成为最流行的技术名词之一,尤其受到亚马逊、阿里等电商巨头的影响,很多传统企业在实施电商过程中也纷纷往微服务架构靠拢,相比单体架构,微服务确实有很多...

23060
来自专栏机器之心

开创性提供量子计算机从软到硬的完整可编程性!Delft提出可执行量子计算指令集eQASM

去年 8 月,荷兰代尔夫特理工大学博士生付祥及其所在团队提出了一种针对超导量子计算机的控制微体系结构,首次有机地连接了量子软件和量子硬件,并使传统处理器的设计技...

16620
来自专栏GopherCoder

『No22: 如何梳理代码逻辑』

在日常工作中,作为初中级程序员,大部分的工作是在实现业务逻辑,但有可能整个项目的代码,你不是第一个接手的,即代码结构不是你设计,前期的需求讨论你也没有参与,最常...

33350
来自专栏Java架构

微服务是传统企业电商解决方案的银弹吗?成功实施微服务的先决条件挑战和风险业务方面的思考演进路线结论

18430
来自专栏大数据文摘

数字营销分析工具:美国今天,中国明天

21450
来自专栏IT米粉

加强管理能提高程序代码质量吗?

代码质量是咱们程序开发中永远的一个痛,提升代码质量有很多种方式,强化管理是一种很常见的方式,这里咱们就聊聊,所谓的管理,真的是提升代码质量最有效的方式吗? 外包...

30350
来自专栏AI科技大本营的专栏

新年第一天 | 恶补新一季《黑镜》的同时,营长又深入扒了扒它那擅长机器学习的新爸爸是如何赚钱的

关注『AI科技大本营』的各位小伙伴,新年好!营长祝愿大家天天都是18岁! 跟放假休息的各位一样,元旦假期的营长着实也不想干活……想起前两天刚刚更新的《黑镜》第四...

369110

扫码关注云+社区

领取腾讯云代金券