C# 如何根据XNA中的情况绘制不同的图形?
我有一个C# 如何根据XNA中的情况绘制不同的图形?,c#,xna,draw,C#,Xna,Draw,我有一个StatBarView类,它包含一个Stat、一个int命名百分比和两个Colors。在Update()方法中,我平滑地改变了条的百分比值,即它必须有多满。接下来我有四个Draw()方法,一个用于绘制小条,一个用于绘制中条,一个用于绘制大条,还有一个用于将其绘制为文本而不是图形 这是可行的,但是。。如果我想实现更多的绘图案例,我觉得这会变得一团糟 我可以将“文本视图”转换为自己的StatTextView,但这只会将问题转移到其他地方。我还想避免将各种参数传递给draw方法,如果我想更改一
StatBarView
类,它包含一个Stat
、一个int
命名百分比和两个Color
s。在Update()
方法中,我平滑地改变了条的百分比值,即它必须有多满。接下来我有四个Draw()
方法,一个用于绘制小条,一个用于绘制中条,一个用于绘制大条,还有一个用于将其绘制为文本而不是图形
这是可行的,但是。。如果我想实现更多的绘图案例,我觉得这会变得一团糟
我可以将“文本视图”转换为自己的StatTextView
,但这只会将问题转移到其他地方。我还想避免将各种参数传递给draw方法,如果我想更改一些东西的大小,它会让我到处跑。我还想避免一些使用switch语句的大规模方法,这感觉更糟
我考虑过传递一个IStatBarContext
,它有一个Draw(int percentage)
,这会起作用,但感觉非常复杂。
我是否必须在每次迭代Draw()
时调用Stat.Draw(spriteBatch,position,new StatBarLarge())
?这是每秒一堆无用的新对象。此外,newstatbarstring()
不会使用这个百分比统计。我想我的设计在某个地方出了问题
也就是说,我不知道如何使代码更干净。有人能帮我吗?听起来你的最后一个例子/选择很恰当。它甚至还有一个名字,即策略模式 在这个模式的基于类的版本中,您通常每次只需传入一个
新的
对象(如您的示例中所示),但因为这是在Draw
方法中,所以我只需将每个策略的示例存储在您的类中,并传递现有的引用
实现此模式的另一种方法是使用委托。要做到这一点,您需要使用Draw
方法将所需信息带到一名学员身上。比如:
public void Draw(SpriteBatch spriteBatch, Vector3 position, Action<int> drawStrategy)
{
...
drawStrategy(percentage);
}
public void Draw(SpriteBatch SpriteBatch,矢量3位置,动作Draw策略)
{
...
提取策略(百分比);
}
然后将大、小、文本等的函数传递给此函数<代码>操作只是一个示例,当然,您可以让它返回值或根据需要获取其他参数
如果文本版本不使用百分比,这是一种代码味道,但您可能不需要太担心它战略绝对是解决问题的方法