C# 如何从XNA窗口中的transpart/invisible表单创建背景面板?
我有一个XNA项目,它利用Windows.Forms来创建GUI。我们的GUI由左面板和右面板组成。它们上面都有一个图像(我们称之为面板图像)。这些图像有按钮,上面有图像。现在面板图像没有完全覆盖面板。现在我们要做的是使面板不可见或透明,以便您只看到面板图像。在下面的图片中,我圈出了我想要透明/不可见的东西。正如您在项目的上半部分所看到的,它看起来已经是透明的,但这只是因为它与XNA场景上的背景融合在一起。在面板位于地面上方的底部,您可以看到面板如何延伸到比面板图像更远的位置。那么,有人知道我如何使这些部分不可见/透明吗 好吧,我们把面板的颜色弄得一团糟。透明,洋红(XNA透明色),这些尝试都没有成功。欢迎您提供任何意见/建议,我们将不胜感激 以下是设置面板的代码:C# 如何从XNA窗口中的transpart/invisible表单创建背景面板?,c#,winforms,user-interface,colors,xna-4.0,C#,Winforms,User Interface,Colors,Xna 4.0,我有一个XNA项目,它利用Windows.Forms来创建GUI。我们的GUI由左面板和右面板组成。它们上面都有一个图像(我们称之为面板图像)。这些图像有按钮,上面有图像。现在面板图像没有完全覆盖面板。现在我们要做的是使面板不可见或透明,以便您只看到面板图像。在下面的图片中,我圈出了我想要透明/不可见的东西。正如您在项目的上半部分所看到的,它看起来已经是透明的,但这只是因为它与XNA场景上的背景融合在一起。在面板位于地面上方的底部,您可以看到面板如何延伸到比面板图像更远的位置。那么,有人知道我如
this.pnlLeftSide.BackgroundImage = global::Referenceator_UI.Resources.LeftBar;
this.pnlLeftSide.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.pnlLeftSide.Controls.Add(this.btnScreenShot);
this.pnlLeftSide.Controls.Add(this.btnScale);
this.pnlLeftSide.Controls.Add(this.btnMove);
this.pnlLeftSide.Controls.Add(this.btnRotate);
this.pnlLeftSide.Controls.Add(this.btnSelect);
this.pnlLeftSide.Location = new System.Drawing.Point(0, 0);
this.pnlLeftSide.Name = "pnlLeftSide";
this.pnlLeftSide.Size = new System.Drawing.Size(197, Screen.PrimaryScreen.WorkingArea.Height);
this.pnlLeftSide.Dock = DockStyle.Left;
this.pnlLeftSide.BackColor = controlColor; //this what we want invisible/transparent
-谢谢你,我的社区
尝试设置面板的属性。您可以手动创建必要的区域
对象(通过枚举描述可见多边形的线),或者使用某种方法将带有透明颜色键的图像转换为区域
(例如,可以轻松地用谷歌搜索)
由于面板的几何图形似乎不太复杂,您可以按照以下方式手动创建区域
:
using(var gp = new System.Drawing.Drawing2D.GraphicsPath())
{
// Here goes series of AddLine() calls.
// You must
// gp.AddLine(0, 0, leftPanel.Width, 0);
// ...
gp.CloseFigure();
return new Region(gp);
}
请注意,使用此方法将获得锐利的边缘(即使有效)。考虑使用XNA绘制所有GUI。尝试设置面板的属性。您可以手动创建必要的
区域
对象(通过枚举描述可见多边形的线),或者使用某种方法将带有透明颜色键的图像转换为区域
(例如,可以轻松地用谷歌搜索)
由于面板的几何图形似乎不太复杂,您可以按照以下方式手动创建区域
:
using(var gp = new System.Drawing.Drawing2D.GraphicsPath())
{
// Here goes series of AddLine() calls.
// You must
// gp.AddLine(0, 0, leftPanel.Width, 0);
// ...
gp.CloseFigure();
return new Region(gp);
}
请注意,使用此方法将获得锐利的边缘(即使有效)。考虑使用XNA绘制所有GUI。为什么面板太大?把它变小:)为什么你的面板太大了?让它变小:)