【发布时间】:2012-09-28 16:57:05
【问题描述】:
我正在尝试设置一个极其简单的 XNA 游戏,上面有 3d 地形和一些 2d GUI 对象。我选择 Nuclex 是因为它似乎是少数几个目前活跃的 2d GUI 之一。
我的问题:在我的游戏中添加一个 Nuclex“屏幕”类会导致 3d 地形和在其上绘制的线条搞砸了——我有三层 3d 对象:地形、地形的线框轮廓和一些拥抱地形的“路线”。添加屏幕后,部分淹没在地形中的路线会完全显示在地形之上,并且线框网格会显得更粗。
这是我的 Game.Initialize 方法的结尾,按照 Nuclex GuiManager 页面上的示例制作:
InputManager im = new InputManager();
IGraphicsDeviceService igds = Nuclex.Graphics.GraphicsDeviceServiceHelper.MakeDummyGraphicsDeviceService(GraphicsDevice);
gui = new GuiManager(igds, im);
gui.Initialize();
Viewport vp = GraphicsDevice.Viewport;
Screen main_screen = new Screen(vp.Width, vp.Height);
//main_screen.
this.gui.Screen = main_screen;
main_screen.Desktop.Bounds = new UniRectangle(
new UniScalar(0.1f, 0.0f), new UniScalar(0.1f, 0.0f), // x and y
new UniScalar(0.8f, 0.0f), new UniScalar(0.8f, 0.0f) // width and height
);
LabelControl text = new LabelControl("hello");
text.Bounds = new UniRectangle(10, 10, 200, 30);
main_screen.Desktop.Children.Add(text);
Components.Add(gui);
base.Initialize();
那么,关于我做错了什么有什么想法吗?
谢谢!
【问题讨论】:
-
会不会是 Nuclex 搞乱了你在 Render 上的渲染状态?也许确保在渲染 GUI 之前保存状态,然后在之后恢复它们?
-
根据文档,为了进行渲染,应将 Nuclex 添加到游戏的组件中(在 Components.Add(gui) 处)——这样我就无法处理绘图命令。你是对的,它几乎肯定会弄乱传递给它的 graphicsDevice 的设置。但是,如果我删除 Components.Add 行并在我的 Game.Draw 函数中手动调用 gui.Draw,即使我将 gui.Draw 调用放在 after 所有其他元素已绘制完毕。