【发布时间】:2014-06-18 06:21:40
【问题描述】:
我正在编写一个简单的回合制 RPG 系统。我有一个BattleScreen 类来处理井的绘制……屏幕。问题是,它必须了解我的Player 类的几乎所有信息。它的Name、HP 值、MP 值、JobName、Level、Experience、Money 等等等等。为了在屏幕上写下来。我的Draw() 方法最终会从Player 中提取几乎所有变量,并且它要求我将Player 中的几乎所有内容都公开
这让我相信让Player 类自行绘制会是一个更好的主意,但后来我得到了BattleScreen 需要调用的多个Draw() 方法。如果Player 是主要播放器(具有所有数据和名称),以及它在场边(只有精灵和 HP/MP 可见)的情况下的绘制方法,以及其他屏幕的其他方法。
这两种方式都让人感到恶心。
这两种方式中的任何一种都被认为是“正常的”吗?有没有更好的设计方法?
【问题讨论】:
-
为什么不直接通过属性公开 Player 类的必要值?
-
很公平,那么我的下一个问题是;必须公开我的 Player 类中的每个属性是否被认为是正常的?
-
我对 xna 没有任何经验,所以这更多是从一般 C# 的角度来看。如果你的类有需要暴露的值,你应该通过属性来做,不管有多少。
-
您可以使用某种
Draw()方法创建一个接口IDrawable,并让您希望能够绘制的每个类都实现该接口。然后将所有这些对象放在List<IDrawable>中,每当您需要绘制它们时,循环该列表并调用该方法。 --- 但是那样你会混合 model 和 view,这通常是个坏主意。 -
@Taelia - 确实。您可以将
Draw()方法(并接受@Heusters 建议)扩展到Draw(ICanvas, IDrawingContext)并处理不同的情况。但这会将越来越多的 view 逻辑放入 model 类中。因此,您可能希望将该逻辑放入单独的 [Object]View 类中。例如PlayerView,它基本上是模型类的实例(对象)的包装器,您可以在其中处理与绘制对象相关的所有内容。您仍然需要公开属性,但只读公开不应该是有害的,对吧?