实体应该知道如何绘制自己吗?我曾经使用过这种方法:它很简单而且有效,但是在学习了 MVC 模式后,我对此感到不安。当所有的显示逻辑都埋在模型中时,很难改变艺术风格。
可以引入一个 View 类,它将级别作为参数并绘制它,但这意味着它必须识别实体类型并引入“switch”语句,我了解到这也很糟糕。
应该在哪里放置绘图代码,以一种可扩展、易于更改、清洁和干燥的方式?
最佳答案
随着各种工作室和团队开始使用新引擎,这个问题在游戏开发中仍然经常出现。
简短的回答是,这取决于您的游戏实体的复杂程度。对于简单的实体,这并不重要。
当您进入更复杂的实体时,您必须重新考虑您的方法。通常,您需要抵制让 uber 循环遍历每个实体并调用一些更新/渲染/任何函数的冲动。除非每次更新、渲染或任何层次结构都完全相同,否则这根本无法扩展。这对于像 Geometry Wars 这样的游戏来说很好,但对于比这更复杂的游戏就不行了。
你想要做的是给最通用的实体集合提取一个使用特定的遍历。例如,如果您想渲染场景,您应该有一种方法从实体集合中提取所有可渲染实体,然后以任意可批处理的顺序渲染所有实体。物理、碰撞、人工智能等也是如此。
一些有用的链接:
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf
我强烈推荐两者;首先是从组件构建游戏实体的设计原理,即渲染组件、物理组件、AI 组件。第二个是各种游戏实体方法的性能特征。
关于model-view-controller - 游戏 : Who is responsible for display?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194273/