如何使我的整个游戏窗口透明?

4

我正在为暗黑破坏神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();

所以我只需要一件事:让这个黑色变成透明的!

链接的问题旨在完全隐藏窗口,而这个问题旨在显示文本,而不隐藏窗口背景后面的内容。 - DOOMDUDEMX
1
如果您想在XNA中使用颜色来实现透明效果,最后一个分量应该是0。而您所使用的值“255”则相当于完全不透明。然而,这并没有帮助到您,因为在XNA中您无法控制窗口的不透明度,即使您可以控制,它也可能只是整个窗口的一个单一不透明度。 - DOOMDUDEMX
抱歉,我不知道自己在想什么。 - user585968
我已经尝试过在VS 2010和2012,XNA 4.0中实现,但是我无法使游戏窗口透明。希望有其他人能够解决这个非常有趣的问题。在GraphicsDevice.Clear(Color)中更改Color参数中的alpha值没有效果。 - user3256944 salutes Monica
1个回答

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

需要注意两点:

  1. 最佳实践是缓存您的Form,以便您可以从任何地方设置TransparencyKey

  2. 您还可以通过以下方式使您的Window无边框:

form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

希望我能帮到您。

编辑: 我刚意识到这个问题已经几年没有回答了。所以如果您偶然发现它,请随意使用。


有点晚了,但基本上那就是我最终做的事情(或者接近那样)。 - Jurion
System.Windows.Forms.Control.FromHandle(hWnd); 总是返回 null 吗? - yan yankelevich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接