Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据XNA中的情况绘制不同的图形?_C#_Xna_Draw - Fatal编程技术网

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策略)
{
...
提取策略(百分比);
}
然后将大、小、文本等的函数传递给此函数<代码>操作只是一个示例,当然,您可以让它返回值或根据需要获取其他参数

如果文本版本不使用百分比,这是一种代码味道,但您可能不需要太担心它战略绝对是解决问题的方法