当前位置: 首页 > article >正文

C++游戏开发前景讨论

C++游戏开发前景还是很不错的。

        为什么「多数」游戏服务端是用 C++ 来写呢,我觉得这个「多数」很可能是错的,没有任何数据支撑C++写的游戏服务器占大多数。但是我自己进鹅厂以后一直是用C++写游戏服务器,而且是纯C++,我了解的不少团队都是纯C++,也有极少数团队换成了golang,我参加评审的时候还碰到过用java写游戏服务器的项目。

下面是个人的一些见解
 

1、游戏引擎不纯粹

        游戏引擎并不是那种特别短小精悍、几个神奇的算法加起来构成稳定健壮的系统的那种程序。比方像Git、Lua、SVN类似的程序或者系统,虽然看似高深,但是功能边界非常清晰。

        现代游戏引擎,除了一些小而美的2D引擎,都是无可避免地走向越来越复杂、越来越集成化的方向。很多功能早就脱离了“渲染”这个核心任务,而是要考虑逻辑扩展、编辑器接口、资源管理、资源编辑器的集成、嵌入脚本引擎等等繁琐的功能中去。而且很多引擎还要从底层支持UI系统,UI这东西可真不小,而且是典型的特别适合用经典面向对象实现的系统。

2、规范约束,释放C++的潜能

        既然如此,如何进行良好的工程管理,如何让大量思想不完全一致的人协作起来,是更重要的任务。如果其他人的思路和你不一致,总不能指责别人“你语言没用对”吧……怎么才算用对,难道你用的就一定对?

        C++在统一观念上不见得更好,甚至问题更大,因为支持多种编程范式……但是如果在工程中做出良好的规定,什么能用,什么不能用。经过限制之后C++的语法特性真的能解决很多问题,毕竟有原生的继承,好用的泛型,特别是C++11之后泛型变得越来越好用了。

        C++语言特性过于太多,以至于很多地方都被人批判。但是实际工作中,我们总能通过交流沟通、制定规范、代码审查来避免绝大多数坑,其实某些“缺点”都是可以解决的。

        反观C,在参与者多了之后问题挺大的。比如:1、用C写面向对象程序,每个guru都有自己独到的见解; 2、指针、类型的转换过于跳脱,互相审查代码有心智负担。当然guru不怕这个。

3、用的人少不见得就不好

        话还要两面说,用的人少就不代表不好。如果进行良好的封装,不要考虑“大而全”,其实C+Lua的方式来制作引擎也特别好。兼顾了底层效率和灵活性。总之,具体用哪种技术路线其实还要看引擎的设计目标吧技术选型这事,说到最后更像是经济学问题,不是纯技术问题。

学习C++ 的 好处:

最大的好处是,学会了C++就学会了大多数语言的通用的大部分,而学其他语言则并不能。

C++是一门难度较高的语言,并且非常严肃严谨。

在高级语言满天飞的今天,很多人会问题主这个问题。

C++至少有以下几点优势:

  • 和C语言兼容
  • 近乎零开销抽象
  • 极高的性能及运行效率
  • 极高的可底层可控性
  • 极高的成熟度
  • 极高的兼容性
  • 适合和硬件打交道

以上优势决定了C++在以下领域,依然是霸主和主流:

1.在游戏和工具领域仍然是主流

首先是游戏领域,Milo Yip表示——
程序员必须使用C++框架/库,如大部分游戏引擎(如Unreal/Source)及中间件(如Havok/FMOD),虽然有些C++库提供其他语言的绑定,但通常原生的API性能最好、最新。其次是工具领域,无论是网络安全还是杀毒软件,C++仍是主流语言。

2.很多领域需要极高的性能和控制性

需要程序员压榨每一分硬件性能的地方并不多,特别是现在的服务器核心数很多,只要能充分利用多核心,每个核心没有完全挖掘也是可以接受的。

一般来说,需要压榨硬件潜力的领域有:

1、操作系统
每个人每天都要用操作系统,这一块的性能哪怕提升1/1000,全球计算机加一起也是相当可怕的。

2、游戏引擎
更好更酷的游戏是主机硬件进化的主要推进器之一,而游戏一旦卡顿,基本就没法玩了,这个领域提升性能和可控性有无限需求。C++一直以来都是编写游戏引擎的首选语言,而且几乎是唯一语言。

3、嵌入式程序
单片机的硬件性能很弱,存储空间极小,C++就派上大用场了!

4、加密与安全方向
这个领域和操作系统类似,每个人每天都会用到。所以用C++来优化很有必要。

不要担心学习C++之后找不到工作,退一万步说,掌握了C++再去学习其他语言,只能说:非常容易。大家只知道程序员工资高,同样的,选择了程序员这条路也要做好付出更多努力的准备,未来的路很长,我们终身学习,共勉。另外,程序员多刷算法题好处多多,算法厉害的人进大厂非常容易。



 


http://www.kler.cn/a/379359.html

相关文章:

  • 又一次安装autoware.universe的过程
  • 气象大模型学习笔记
  • 缓存、注解、分页
  • 低代码用户中心:简化开发,提升效率的新时代
  • C++ 详细讲解 洛谷P1428 小鱼比可爱
  • 2024年大厂AI大模型面试题精选与答案解析
  • [算法初阶]第二集 滑动窗口(已完结)
  • 【NCRE】全国计算机一级必刷选择题(真题476道)
  • 第三十三章 Vue路由进阶路由模块封装
  • 【LeetCode:153. 寻找旋转排序数组中的最小值 + 二分】
  • sql将查到的所有id,拼接成字符串,用逗号隔开,并排序
  • 路由器中怎麼設置代理IP?
  • 微服务设计模式 - 发布订阅模式(Publisher Subscriber Pattern)
  • [java][高级]FilterListenerAjax
  • 同舟化工:实现LTC全流程数字化管控,赋能销售,提升运营效率
  • 基于springboot的Java学习论坛平台
  • 计算机系统架构
  • 【Python单元测试】pytest框架单元测试 配置 命令行操作 测试报告 覆盖率
  • Java项目管理与SSM框架介绍
  • 基于Multisim汽车尾灯电路左转右转刹车检查功能电路(含仿真和报告)
  • 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
  • 15分钟学 Go 第 33 天:项目结构
  • 【Git】如何在 Git 中高效合并分支:完整指南
  • 算法笔记()
  • 有效的数独(C语言解法)
  • Kubernetes中的cm存储