游戏作为一种特殊的程序,讨论游戏需要谨慎,不同类别的游戏占用的服务器或客户端资源大有不同,基本上所有编程语言都可以做游戏,只是根据效能、FPS、绚丽程度,可使用的编程语言有极大不同。
游戏标准
- OpenGL (ES) 和DirectX
游戏引擎
- BigWorld
- C++做引擎。
- Unity 3D
- 覆盖主流PC/移动和消费平台,代表作品王者荣耀、完美世界、诛仙等。
- 运行环境是.NET.
- 核心物理引擎PhysX, 采用C/C++,游戏引擎是C#,给开发者C#/C++编程接口,除此之外,Unity也提供Lua、Javascript和Python脚本接口,早期还支持Boo语言(一种非常类似Python的脚本语言,运行于.NET框架).
- Unity客户端开发官方建议C#,服务器端为了提升效率也可选用C++. 客户端代码可使用Mono JIT或利用IL2CPP转换成C++.
- Unity C#代码可编译成本机DLL,以加速执行效率。
- 为支持Lua, Unity环境一般集成Lua虚拟机, 此虚拟机用C语言编写。
- UnityScript是指U3D使用的JS, 它是JS的增强,静态类型检查并有OOP, 运行能力超过JS.
- Cocos2d-x
- 核心引擎采用C++,提供C++、Lua、Javascript三种开发者编程接口,支援涵盖主流PC/移动端/浏览器,基于OpenGL ES和Metal(Apple 2014年推出)。
高性能
3A大作往往意味着客户端较高渲染能力和服务器端多帧实时处理计算和网络能力。
- 客户端
- 需要高fps, 客户端渲染每秒需要处理完30~60fps不等,就是16~33ms一帧。搭配带虚拟机或者脚本语言会更慢,最优的做法是用接近硬件的语言。
- 服务端
- 服务器端处理所有客户端请求,假设人数为N,需要将数据包状态发送到每个客户端,耗时复杂度为O(N2).
- 例如在线100人,每个客户端每秒至少同步10个数据包,理论计算,每秒服务器需要处理100 * 99 * 10 = 99000个数据包。
- 网络游戏为了解决客户端外挂欺诈问题,例如碰撞检测等功能会在客户端和服务器端全部做一遍。
- 如果不采用高性能编程语言,服务器无法承载如此大的数据处理。