在XNA中绘制GUI

时间:2013-04-18 09:15:09

标签: c# user-interface xna overlay projects

我正在制作一个XNA 2D平台游戏,我想知道是否可以在游戏中绘制一种静态GUI?

我的意思是,当游戏更新和玩家位置变化等时,GUI将被绘制在一种静态层(叠加?)上,这将是游戏运行的窗口的大小。这样游戏就不必经常更新GUI的位置,因此处理得更好一些。

有什么想法吗?

感谢您的时间

2 个答案:

答案 0 :(得分:0)

当然,您可以使用SpriteBatch在任何地方绘制任何精灵。

您如何管理它取决于您。只是不要给出任何变换矩阵,并且会在你指定的坐标处绘制东西。

您最终会绘制您的关卡(例如,某些相机位置会偏移),然后在其上绘制您的GUI元素,没有偏移。

答案 1 :(得分:0)

是的,您可以使用spritebatch绘制它们:)

//HudTexture is a transparent texture the size of the window/screen, with hud drawn onto it.
SpriteBatch.Draw(HudTexture, Vector2.Zero, Color.White);
//Let's say that it works well to draw your score at [100,100].
SpriteBatch.DrawString(HudFont, Points.ToString(), new Vector2(100,100), Color.White);

如果你打算制作更多的GUI(按钮等),你可能想看看这个答案,我写了另一篇文章: XNA DrawString() draws only a partial string

也;对于绘图分数等,由于ToString,我经历了相当多的装箱/拆箱。出于这个原因,我经常有一个字符串数组来表示分数:

String[] ScoreText = new String[100000]; //As big as your max score

//In Initializing method:
for (int i = 0; i < ScoreText.Length; i++)
    ScoreText[i] = i.ToString();

//In draw:
SpriteBatch.DrawString(HudFont, ScoreText[Points], new Vector2(100,100), Color.White);