首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在商店中建模(比如LoL,Dota,.)MVC方式?

如何在商店中建模(比如LoL,Dota,.)MVC方式?
EN

Software Engineering用户
提问于 2017-08-07 09:42:35
回答 1查看 211关注 0票数 1

在2D游戏中,建筑物可以用模块升级,这些模块可以在商店购买。

商店是由一个典型的图标网格来表示的,每个图标代表一个可购买的模块。当鼠标悬停图标时,相关模块的名称--相关模块的描述--出现在弹出窗口中。

目前,这些模块是使用以下数据扩展抽象Module类的模型对象:

  • 模块的名称
  • 描述它对你的建筑所起的作用
  • 用于在商店网格中显示模块的图标
  • 另外,一些f(building)-like方法实际上是将建筑物“模块化”.

在游戏开始时,商店提供了一个模块列表。当将模块应用于构建时,f(building)方法将在购买模块上调用。因此,即使不使用Singleton模式,每个*Module类也只实例化一次。

我意识到这个设计并不是最优的:

  • 首先,一个模块,一个模型对象,嵌入它自己的图标,一个视图表示。
  • 更重要的是:一个模块是无状态的,因为相同的对象可以应用在几个建筑物上(可能是不同的玩家);为了有状态,一个模块必须佩戴一个[building] => data映射.我不知道为什么,但我对这个解决方案有种不好的预感.

提问时间:

  • [building] => data映射实际上是一个糟糕的解决方案吗?
  • 如果是这样的话,解决我遇到的“状态”陷阱的最好方法是什么?
  • 附属一:而且,如果每个模型对象不需要佩戴一个图像,它将更符合MVC.
EN

回答 1

Software Engineering用户

发布于 2017-08-07 14:37:22

很简单。

首先,您有IModuleDefinition接口。这个接口的主要目的是识别一个模块,可能是通过一个模块的一些唯一标识符来识别。它将有像CreateViewCreateModule这样的方法。这些实例将创建用于显示模块信息(IModuleView)和实现模块行为(IModule)的具体实例。这也意味着可以为每种类型的模块创建任意数量的实例,因此状态可以在模块实例中。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/355236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档