我正在为暗黑破坏神3做一点覆盖(仅供个人使用!) 我只想在屏幕中间绘制一个文本字符串(我们稍后会看到字体)。 但是使用XNA我找不到如何将背景设置为透明... 到目前为止我的代码是:
GraphicsDevice.Clear(new Color(0, 0, 0, 255));
spriteBatch.Begin();
spriteBatch.DrawString(font, this.TestToShow, new Vector2(23, 23), Color.White);
spriteBatch.End();
所以我只需要一件事:让这个黑色透明!
答案 0 :(得分:3)
您似乎不明白GraphicsDevice.Clear(Color)
的作用。
XNA打开一个Windows窗口并使用DirectX绘制它。
GraphicsDevice.Clear(Color)
清除使用DirectX绘制的缓冲区,但与窗口没有任何关系。
要使窗口透明,您必须修改底层窗口。
为此,您必须首先添加对System.WIndows.Forms和System.Drawing的引用。
在Game1类的构造函数中,执行以下操作:
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
IntPtr hWnd = Window.Handle;
System.Windows.Forms.Control ctrl = System.Windows.Forms.Control.FromHandle(hWnd);
System.Windows.Forms.Form form = ctrl.FindForm();
form.TransparencyKey = System.Drawing.Color.Black;
}
让我们逐行说明:
嗯,前两个是自动生成的,我们不关心这些。
IntPtr hWnd = Window.Handle;
此行为您提供指向Windows中注册的底层窗口的指针。
System.Windows.Forms.Control ctrl = System.Windows.Forms.Control.FromHandle(hWnd);
此行获取给定窗口中的WindowsForms - Control
。
System.Windows.Forms.Form form = ctrl.FindForm();
此行显示控件所属的表单。
form.TransparencyKey = System.Drawing.Color.Black;
最后一行设置了键 - Color
,用于标识一个单独的Color
- 值根本不绘制。我使用了Black
,但您也可以选择CornflowerBlue
。
这使您的窗口内部透明Color
。我建议您选择与Color
明确相同的Color
。
有两点需要注意:
最佳做法是对Form
进行缓存,以便您可以随时随地设置TransparencyKey
。
您也可以通过这种方式使Window
无边框:
form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
希望我能提供帮助。
编辑: 我刚刚意识到这是几年前被问过的,没有答案。如果您偶然发现它,请随意使用它。