【发布时间】:2015-08-09 08:13:23
【问题描述】:
我正在阅读 this 关于在游戏开发中使用 MVC 设计模式的文章,我很想尝试一下,但我对如何动态创建 MVC 对象有点困惑。在文章中,他们谈论的是射击游戏的创建,但我不明白士兵如何投掷手榴弹。士兵模型创建手榴弹模型很容易,但是如何在士兵模型不知道手榴弹 mvc 的视图和控制器的情况下设置视图和控制器呢?
【问题讨论】:
我正在阅读 this 关于在游戏开发中使用 MVC 设计模式的文章,我很想尝试一下,但我对如何动态创建 MVC 对象有点困惑。在文章中,他们谈论的是射击游戏的创建,但我不明白士兵如何投掷手榴弹。士兵模型创建手榴弹模型很容易,但是如何在士兵模型不知道手榴弹 mvc 的视图和控制器的情况下设置视图和控制器呢?
【问题讨论】:
恕我直言,我认为你采取了错误的方式..
每个游戏都有棋盘或地图。
您的地图“模型”应该是创作的管弦乐队。
因此,如果一名士兵正在投掷手榴弹:
1. 你的 ui 控制器(或士兵控制器)会触发一个投掷手榴弹的事件。
2. 您的地图模型获取该事件并为被投掷的手榴弹创建模型。
3.当手榴弹飞行时,它应该从地图上接收有关经过的障碍物等信息。
简而言之 - 地图是地图上所有可见对象的管弦乐队。
关于文章注意,视图被描述为“EntityRepresentation”或我的话中的地图。
它不是您期望在富客户端应用程序中找到的嵌套 MVC 模式。
祝你好运! :)
【讨论】:
In our code, the RepresentationManager gets notified when an entity is added to the EntityManager (it could be a generic listener on the EntityManager). It then creates the EntityRepresentation. For that you'd use a factory pattern. Something like: map = { { "Entity", "EntityRep" }, { "EntityA", "EntityARep" }, ... } RepresentationManager::OnEntityAdded(Entity *e) { string rep_type = map[e->GetType()]; EntityRep *rep = factory->Create(rep_type) ... }'