2015-03-14 26 views
3

我一直在阅读MVC,并一直试图按照我的能力尽力去做,但有一件事情不断涌现。在MVC中,View允许查看但不与模型交谈?

视图能看到模型对象吗?

我目前的游戏结构如下。

对象(模型)< - >场景(控制器)< - >精灵(查看)

目前我做到以下几点。

场景创建MapObject(模型)。场景然后创建一个MapSpriteNode(视图),但用MapObject初始化它。 MapSpriteNode需要绘制和使用信息来布置其视图和子视图。现在MapSpriteNode可以保存对该MapObject的引用,但不允许改变MapObject。这样,当在MapSpriteNode上调用更新时,它可以看到MapObject上的脏图索引等事情,并且可以更新其相应的TileNodes。

所以,现在出现这种情况

雪碧被触摸,并通知控制器 - >控制器报告交互模式 - >模型相应地更新,标志着脏指标

更新循环发生

场景需要更新到 - > MapObject的(需要发生随着时间的推移任何其他更新) 场景需要更新 - > MapSpriteNode(查看是否有肮脏的索引和更新) 场景需要清理脏 - > MapObject的(肮脏的指标,因为去除渲染是d一个)

这是否仍然遵循MVC?

回答

4

“可以在视图看到模型对象?”

是的,只要您不通过视图更改任何内容,View就可以看到“内部”模型。

“这仍然是以下MVC?”

肯定。

在MVC体系结构中,模型应该独立于控制器和视图,并且在“被动”实现(您的情况)的情况下,View应该轮询模型以获取控制器通知的数据,而不是模型通知这样做(您可以假设在这个“被动”情况下Model甚至不知道Controller和View存在)。通过控制器被通知当

查看应从型号查询数据和发生这种情况时,场景调用更新MapSpriteNode,并查看也应通知有关雪碧时,被触摸后通知控制器类似事件控制器。

至于控制器去,它应该通知查看更新就像当场景需要更新MapSpriteNode,并应通知模型进行更新。

+1

谢谢你的回答。这是我第一次听说“被动”的实施。你有没有一个好的联系,你觉得做一个很好的工作来澄清“被动”和非被动之间的区别?我也有关于MVC和具体SpriteKit另一个问题,如果有关MVC感兴趣http://gamedev.stackexchange.com/questions/96662/do-features-of-spritekit-follow-mvc – 2015-03-18 23:25:29

+0

维基百科的文章解释了它。当您将多个视图和控制器绑定到单个模型时,通常会使用活动MVC。在这种情况下,在其中一个控制器更新模型后,所有视图也必须更新。为了做到这一点,Model必须通过Observer模式的使用来通知他们。 – 2015-03-25 11:55:44