《游戏编程模式》一1.3 性能和速度

简介:

本节书摘来异步社区《游戏编程模式》一书中的第1章,第1.3节,作者: 【美】Robert Nystrom (尼斯卓姆) 译者: 赵卫兵 , 许新星 , 姜召阳 , 陈侃 , 屈光辉 , 郑炯彬 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 性能和速度

你有时候会听到关于软件架构和相关概念的批评声,尤其在游戏开发中:它会影响到游戏的性能。许多模式让你的代码更加灵活,但是它依赖于虚函数派发、接口、指针、消息以及其他至少有一些运行成本的机制。

一个有趣的范例是C++模板。模板元编程有时可以让你获得抽象接口而没有任何运行时开销。

对灵活的定义,不同人有不同的看法,当你在某些类中调用一个具体方法时,你相当于将这个类固定(很难做出改变)。当你使用一个虚方法或者接口时,被调用的类将直到真正运行起来才能被追踪到,这样的程序更具灵活性但是会增加额外的运行成本。

模板元编程介于两者之间。在模板元编程中,在编译期间你就能决定在模板实例化时调用哪个类。
还有一个原因。很多软件架构的目标是使你的程序更加灵活,这样只需较少的代价便可对代码进行改变,这也意味着在程序中更少的编码。你使用接口,以便代码可以与任何实现这些接口的类进行工作,而不是使用具体类。你使用观察者模式(第4章)和通信模式(第15章)使得游戏的两部分互相沟通,而将来它们自身就会成为另外两个需要沟通的部分。

但是性能优化总是在某些假设下进行的。优化的方法在特定的条件下进行更好。我们能肯定地假设永远不会有超过256个敌人吗?好极了,我们可以将ID打包成一个单字节。在这里我们只会在一个具体类型上调用方法吗?好,我们就静态调度或者对它内联。所有的实体都是同一个类吗?太好了,我们可以将它们做成一个很棒的连续排列(第17章)。

这并不意味着它的灵活性很差!它可以让我们快速地进行游戏更新,开发速度是让游戏变得有趣的关键性因素。没有人,哪怕是Will Wright[1],可以在纸上设计出一个平衡的游戏。这需要迭代和实验。

你越快地对想法付诸实践并观察效果,你就能越多地尝试并越有可能找到一些很棒的东西。即便在你已经找到合适的技术之后,你也要用充足的时间来进行调整。一个细小的不平衡就会破坏掉游戏的乐趣。

这里没有简单的答案。将你的程序做得更具有灵活性,以便能够更快速地进行原型编写,但这会带来一些性能损失。同样地,对你的代码进行优化会降低它的灵活性。

根据我的经验,将一款有趣的游戏做得高效要比将一款高性能的游戏做的有趣更简单些。一种折中的办法是保持代码的灵活性,直到设计稳定下来,然后去除一些抽象,以提高游戏的性能。

相关文章
|
6天前
|
消息中间件 算法 Java
如何实现一个高性能服务器
如何实现一个高性能服务器
13 0
|
24天前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
6月前
|
机器人 测试技术 持续交付
如何实现高效的Web自动化测试?
如何实现高效的Web自动化测试?
|
10月前
|
消息中间件 存储 人工智能
深入了解IdleHandler,用来做优化或者轻量级任务都是极好的
IdleHandler 是 Handler 提供的一种充分利用CPU的机制, 主要是在 MessageQueue 出现空闲的时候被执行
|
存储 缓存 算法
【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析
【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析
177 0
【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析
|
消息中间件 弹性计算 缓存
如何用反应式编程提升系统性能与可用性?
如何用反应式编程提升系统性能与可用性?
4865 0
|
并行计算 数据可视化
《OpenACC并行程序设计:性能优化实践指南》一 第3章 使用Score-P和Vampir分析混合应用性能
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1221 0