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

简介:

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

1.3 性能和速度

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

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

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

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

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

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

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

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

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

相关文章
|
程序员 设计模式 数据采集
《游戏编程模式》一导读
在这叠文档的最后部分,是一个真正的“怪物”:一个代码量占据几页篇幅的程序。我们思量良久,这才鼓起勇气去尝试它,不过它极为诱人——标题写着“巨魔洞穴”。我们不知道它是做什么的,不过听起来像是个游戏,还有什么能比亲手写一款计算机游戏更酷呢?
1702 0
ly~
|
4月前
|
存储 算法 编译器
游戏开发中,C 语言的性能优势体现在哪些方面?
在游戏开发中,C 语言凭借其对硬件的直接访问和内存操作的精准控制,能够显著提升性能。它允许开发者手动管理内存,优化数据存储和读取,充分利用显卡等硬件资源,实现流畅的图形渲染和音效处理。作为一种接近底层的语言,C 语言具有高效的执行速度,适用于物理引擎和碰撞检测等高性能需求模块,并且提供了丰富的运算符和数据类型,便于实现高效的算法。此外,C 语言代码具有良好的可移植性和跨平台性,支持多种操作系统和硬件平台,减少了多平台发布的开发成本。编译器提供的优化选项和手动代码优化的灵活性进一步提升了游戏的整体性能。
ly~
179 5
|
6月前
|
调度 Android开发 开发者
【颠覆传统!】Kotlin协程魔法:解锁Android应用极速体验,带你领略多线程优化的无限魅力!
【8月更文挑战第12天】多线程对现代Android应用至关重要,能显著提升性能与体验。本文探讨Kotlin中的高效多线程实践。首先,理解主线程(UI线程)的角色,避免阻塞它。Kotlin协程作为轻量级线程,简化异步编程。示例展示了如何使用`kotlinx.coroutines`库创建协程,执行后台任务而不影响UI。此外,通过协程与Retrofit结合,实现了网络数据的异步加载,并安全地更新UI。协程不仅提高代码可读性,还能确保程序高效运行,不阻塞主线程,是构建高性能Android应用的关键。
86 4

热门文章

最新文章