Как я могу сделать фоновую панель из формы transpart / невидимой в окне XNA? - PullRequest
1 голос
/ 17 марта 2012

У меня есть проект XNA, который использует Windows.Forms для создания GUI.Наш графический интерфейс состоит из левой панели и правой панели.У них обоих наложено изображение (назовем их панельными изображениями).Эти изображения имеют кнопки с изображениями над ними.Теперь изображения панели не полностью покрывают панель.Теперь мы хотим сделать панель невидимой или прозрачной, чтобы вы могли видеть только изображения панели.На картинке ниже я обведу то, что я хочу быть прозрачным / невидимым.Как вы можете видеть в верхней части проекта, он уже выглядит прозрачным, но только потому, что он сливается с фоном сцены XNA.Внизу, где панель находится над землей, вы можете видеть, как панель расширяется дальше, чем изображения панели.Итак, кто-нибудь знает, как я могу сделать эти части невидимыми / прозрачными.

Хорошо, мы возились с созданием цвета панели Color.Transparent, magenta (прозрачный цвет 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 Ответ

1 голос
/ 17 марта 2012

Попробуйте установить Region свойство ваших панелей. Вы можете создать необходимые Region объекты вручную (путем перечисления линий, описывающих видимый многоугольник) или использовать какой-либо метод, который преобразует изображение с цветным ключом прозрачности в Region (например, легко гуглить - https://stackoverflow.com/questions/886968/how-do-i-convert-an-images-transparency-into-a-region).

Поскольку геометрия ваших панелей не кажется слишком сложной, вы можете создать 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.

...