易燃物汇聚 YouTube 有声书与书评
游戏编程模式 封面

游戏编程模式

Robert Nystrom

8953人在读
22.9万字总字数
¥44.16定价

有声书与视频解读 YouTube有声书 8 · 视频解读 27

内容简介

游戏开发一直是热门的领域,掌握良好的游戏编程模式是开发人员的应备技能。本书细致地讲解了游戏开发需要用到的各种编程模式,并提供了丰富的示例。全书共分20章,通过三大部分内容全面介绍了与游戏编程模式相关的各类知识点。首部分介绍了基础知识和框架;第二部分深入探索设计模式,并介绍了模式与游戏开发之间的关联;第三部分介绍了13种有效的游戏设计模式。本书提供了丰富的代码示例,通过理论和代码示例相结合的方式帮助读者更好地学习。无论是游戏领域的设计人员、开发人员,还是想要进入游戏开发领域的学生和普通程序员,都可以阅读本书。

读者书评

★★★★★

2025年读完的第十六本书,这本书真的写得非常棒。最近的两年内我读了几十本书,基本上都很少在读书的过程中写各种读书的想法,唯独是这本书,我留下了不止20个想法。唯一的缺陷就是,这本书很多地方的翻译出现了错误,而且不够“信雅达”,还有其他国外作者写得不合时宜的玩笑。 在读到“空间分区”的这个章节中,读到的其中一个对高维度的数据进行“降维”操作,提升内存空间的利用率。这样的方法论,在数据仓库、数据湖或者相关的大数据技术具有异曲同工之美,也与互联网的AI推荐算法“双塔模型”如出一辙。“双塔模型”也是对用户和产品进行对标模型向量降维,通过余弦函数求解用户向量和产品向量是“垂直”还是“平衡”,以求解用户与产品是否能正常匹配上。这让我想起来,列宁说的“事物总是具有普遍的联系性”。 下面是读书笔记: 1.衡量一个设计好坏的方法就是看它应对变化的灵活性。在我认知内,架构的设计需要因应需求、场景与成本综合考虑,在设计的考虑上有所取舍,不能出现为了设计而设计的过度设计。 2.快速迭代是一个需要被重视的东西,一是可以快速验证,二是可以不断打磨完善。但是在游戏开发中,所谓的快速迭代并不是一定需要可运行的程序,可以是纸上的模拟,或者别的形式,国内很多的开发者大部分对这个问题是有误解的。 3.将一款有趣的游戏做得高效要比将一款高性能的游戏做的有趣更简单些。一种折中的办法是保持代码的灵活性,直到设计稳定下来,然后去除一些抽象,以提高游戏的性能。 4.命令模式,命令就是面向对象化的回调(Commands are an object-oriented replacement for callbacks),命令就是一个对象化(实例化)的方法调用(A command is a reified method call)。一般用在控制游戏中角色的动作,比较好地实现动作的撤销(UNDO)与重做(REDO)。 5.享元模式通过将对象数据切分成两种类型来解决问题。享元的思想,就是共享。将被所有实例共享使用的数据单独拿出来,这部分数据只需要存储一份即可,其它的个性化数据属于每一个实例,用来表示实例之间的共享与殊相区别。一般在游戏内实现相同的大量相同物品(例如树,或草),但各个物品都略微有点差异的情况。 6.观察者模式,“在对象间定义一种一对多的依赖关系,以便当某对象的状态改变时,与它存在依赖关系的所有对象都能收到通知并自动进行更新。”例子:Model-View-Controller架构,游戏中使用来做“解锁成就”,它使得代码能够发出一个消息,并通知对消息感兴趣的对象,而不用关心具体是谁接收到了通知。 7.原型模式:“使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象”。 8.单例模式:确保一个类只有一个实例,并为其提供一个全局访问入口。 9.状态模式:允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像是在修改自身类。 10.双缓冲:为应对同时进行读写操作的对象所设计。主要是为了实现渲染帧之间的平滑处理问题,使得前后帧的缓冲交换更高效。 11.子类沙盒模式,一步步“操作”的定义在父类,组合“操作”的“算法骨架”在子类;模板模式,“算法骨架”在父类,而算法中的某些“操作”(步骤)在子类中实现。 总结来讲,这本书真的不是一般的好,下一年我一定要再抽时间重新读一下这本书,再好好地重新总结下,看一下能不能从其它的角度获得不同的知识。

★★★★★

2.Command GAS; AI(BehaviorTree actions); EnhancedInput(ActionBind); Multiplayer Replay System; Undo/Redo 3. Flyweight ISM&HISM; Material&M Instance; Texture sharing; Animation sharing; Niagara; Object Pool & Flyweight(e.g. bullet pool); Level Streaming & World Partition(SM in GameInstance, GameMode, DataAsset, World Settings in Level) 4. Observer Delegates or BP EventDispatcher(eg. UI/Inventory System); AI Perception System&AI Controller(UAIPerceptionComponent & AAIController); Animation Notify(UAnimNotify & Combat/Sound Manager, Effect System) 5. Prototype Data-Driven(Inventory Items, Enemies) 6. Singleton Log System; Save/Load System; Game/Audio/Global Input/Settings Managers 7. State Input Handling; Network 8. Double Buffer Concurrency Scenarios: Rendering(DX SwapChain); Physics Simulations(positions, velocities); AI State; Animation(skeleton&shape interpolations); Networking(packets); Load/Save; Audio; PCG; RTS(AI Decision Tree, Pathfinding); FPS(Networking, Projectile) 11. Bytecode Configs: Gameplay logics like NPC behaviors, event triggers, AI instructions; Cutscenes; Modding & DLC Support; Procedural Content Generation(heightmap, terrain, foliage, level etc.) 12. Subclass Sandbox AI Behaviors(AIController & Character/Pawn) Inventory Item(Category via subclass sandbox; Value Design via data-driven; eg. weapon, food, potion) 13. Type Object different item categories, complicated behaviors, to be extended in the future: subclass sandbox data sharing with slight differences: data-driven & type object, combined with factory method. 14. Component GAS 15. Event Queue Physics(deferred gameplay events like collision) Task System 16. Service Locator AI(multiple NPCs, globally decision making); Audio; Event; Logger Where to register: GameMode, GameInstance, Level setups, UE built-in subsystem. In functions like Init() or BeginPlay(). 17. Locality ECS(GAS&AoS, optimized: SoA); Level Streaming(adjacent partitions loading); Pathfinding 18. Dirty Flag Deferred Updating: Scene Graph(TFs); Rendering(materials, textures, buffers); UI; Animation; Collision Detection 19. Object Pool Niagara; SM & HSM; NPC; Bullet; Audio —— 例子是结合自己的理论和实战知识潦草地总结出来的所以不全,有些写过有的还没亲手写过,主要针对UE5(Unity不熟😂)。 切换输入法麻烦,有点乱就这么着吧反正我能看懂就行😂

★★★★★

第二次读完这本书,回想上一次读还是22年研二准备秋招的时候,转眼已经当了两年社畜了。很多事发生了改变,不变的是我依然是条单身狗… 第一次读这本书还是为了解决面试中可能遇到的设计模式问题,而重读这本书则是受到了ai编程的影响,真正想要提高自己的设计能力以更好地利用ai了。细节来说这半年来ai编程成本的急剧下降和效果的快速提高,让我无论在日常开发还是工作中都越来越依赖ai,亲自动手写的代码越来越少。虽然ai确实越来越强,基于agent的编程助手也演化出了Architect和Boomerang这种流程,但受到context长度的限制,项目大起来之后还是感到寸步难行,想用ai真正搭建起一套完善且可持续维护和扩展的软件依然很困难。既然ai已经能很好地受指挥解决局部小功能的编写问题,是context长度限制了ai的能力,那么人就该更多着眼于设计用一个好的架构,将各个小组件清楚划分,保持功能间的解耦和单代码段的简短,才能最大程度地适配ai较短的context并得到更好的生成效果,提高开发效率。 再说到这次重读本身,最大的感触还是实践带来的改变。上班前自己没做过什么很大的项目,写的代码也大多是一次性的,很多时候设计模式如何无关紧要,当时读这本书只感觉是一本很适合新人快速入门并提供面试题解法的书。而两年来在公司参与几个项目后,很多书中提到的问题实实在在出现在了眼前,这种时候才真正意识到了解设计模式在实际开发中的重要性。很多代码用了正确的架构后,无论是梳理思路,开发新功能,还是后续维护,都省心不少。经历一些重构的烦恼后回来重读这本书,一边看一边会联想到曾经或者正在遇到的问题,有时候读到作者的吐槽会心一笑,有时候一下子产生新的思路,作为一本技术书能让人有这种感觉,真是一本好书。

★☆☆☆☆

原书的内容非常棒,对于理解程序设计很有帮助,如果能理解书中提到的设计理念,受益匪浅。但是本书糟糕的翻译让作者的意思并不能很好的传达出去,有时候看书中的句子甚至要比看代码难理解的多,对一些术语的翻译并不是很准确。像是头等函数,第一眼看到还以为是什么新概念,查了一下才知道就是“第一公民函数”,类似的问题就不一一例举。本书在github上原作者有开源,并有免费的英文原文网站可以阅读,也有热心读者的免费开源的中文翻译版,这里的水平要比本书译者的水平要高一些,翻译更准确,原书注释也更清晰,推荐阅读原文或者自行编译开源中文译本。

★★★★★

很棒的一本书啊(」゜ロ゜)」,虽然还是有些部分没看懂,值得来回看,有些代码可以直接用,照着翻.部分模式在项目经验或者引擎已经应用了。最后的空间划分很厉害,作者浅尝辄止,至于4四叉树,八叉树,不视频,等等,菜鸡伤不起一概不懂。很大牛差距get……组件模式,解决了oop多继承的问题,后面部分提到odd的趋势和应用,真心蛮好的。现在游戏行业,odd相当火……没事作为工具书翻翻特别好。最后,仍需努力

★★★★★

私下请教Elringus时推荐我的,是一本很值得每次新项目时三刷、四刷的书,对于阅读别人的代码也很有帮助。读完后对11章的字节码部分甚有兴趣,于是硬着头皮把一直没看完的张秀宏的《自己动手实现Lua》读完了。由于做游戏很容易接触到Lua,两个建议都读一下。

★★★★★

我还以为是我语文学得不好,看了评论才发现原来不止我一个人看不懂😢 书挺好的,用最简单的例子说明白了游戏中常用的设计模式。看了书再去看引擎中的源码实现就轻松多了,推荐一下知乎上的文章,总结了ue中使用设计模式的例子。 https://zhuanlan.zhihu.com/p/652149505?utm_campaign=&utm_medium=social&utm_oi=770688606179196928&utm_psn=1687936294565658624&utm_source=zhihu

★★★★★

不适合毫无基础的新手读, 需要你已经有了一部分相关的经验,带着“钥匙”去读。 正如作者所说,不要一板一眼,逐字逐句的去读。重点看对你重要的、你需要的部分。 不少成熟的设计模式已经嵌入到某些游戏引擎的基础中了。重点可以看看最后一章的优化。

★★★★★

对所有游戏开发程序员都非常有用

★★★★★

算比较快的过了一下这本书,很多方法都在实际开发中运用到了,确实非常实用,很多都是工程实际上用到的方法再学术化的,我在不了解这些方法的时候其实也按照这样的思想做过项目,但是了解了之后更难系统化宏观的装备自己的武器库。初学者不一定能够深入了解,还是需要一定项目经验才能理解为什么这样用

书籍信息

作者Robert Nystrom
译者GPP翻译组
出版社人民邮电出版社
出版时间2016-09-01
ISBN9787115426888
分类计算机-计算机综合
格式EPUB
完结状态连载中
章节数33