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/

相关文章:

javascript - jQuery MVC 架构

c# - Dapper 是否支持 SQL 2008 表值参数 2?

delphi - 复杂的软件架构

asp.net-mvc - 使用 WCF 服务处理 MVC 错误

php - 如何在 PHP5 中实现模板继承(如 Django?)

vb.net - 在单个语句中编写代码然后逐步分解它是否有更多的开销?

java - 什么更好 : Interface or playing with public/protected?

C# 属性使用

coding-style - PHPStorm switch 语句 'break' 缩进

Scala风格: More than one class in a file?