model-view-controller - 游戏 : Who is responsible for display?

标签 model-view-controller coding-style

实体应该知道如何绘制自己吗?我曾经使用过这种方法:它很简单而且有效,但是在学习了 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/

相关文章:

java - 为什么单独的方法比内联相同的代码运行得更快

ruby-on-rails - 我应该在哪里为我的用户的 MVC 架构的个人资料页面创建一个缩短的 URL?

wpf - Haskell 中 MVC 框架的镜头

c++ - 在这种情况下如何/返回什么?

java - Java中String(String)构造函数的使用

c++ - 更改项目中变量名称的最安全方法

c# - 使用自定义成员资格和角色提供者在 MVC 中实现 IPrincipal 和 IIdentity

reactjs - 如何将 key 检索到 Semantic-ui-react 下拉列表中?

php - 使用PHP在MVC View 中显示自定义错误消息

scala - 带有大量方法链接的Scala代码的接受/推荐语法是什么?