如何从XNA窗口中的transpart / invisible窗体中创建背景面板?

时间:2012-03-16 22:39:03

标签: c# winforms user-interface colors xna-4.0

我有一个利用Windows.Forms创建GUI的XNA项目。我们的GUI由左侧面板和右侧面板组成。他们都有一个图像放在他们身上(我们称之为面板图像)。这些图像的按钮上面有图像。现在面板图像没有完全覆盖面板。现在我们要做的是让面板不可见或透明,这样你才能看到面板图像。在下面的图片中,我圈出了我想要透明/不可见的东西。正如您在项目的上半部分所看到的,它已经看起来很透明,但这只是因为它与XNA场景中的背景融为一体。在面板在地面上的底部,您可以看到面板如何比面板图像延伸得更远。那么,有没有人知道如何让这些部分变得不可见/透明。

好吧,我们已经搞乱了制作面板颜色Color.Transparent,洋红色(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

- 感谢stackoverflow社区

Example of my problem

1 个答案:

答案 0 :(得分:1)

尝试设置面板的Region属性。您可以手动创建必要的Region对象(通过枚举描述可见多边形的线条)或使用一些将透明度颜色键转换为Region的图像(例如,轻松搜索 - https://stackoverflow.com/questions/886968/how-do-i-convert-an-images-transparency-into-a-region)。< / p>

由于面板的几何图形似乎不太复杂,您可以按照以下方式手动创建Region

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。