移动时 PictureBox 背景等于其他 PictureBox?

PictureBox background equal to other PictureBox while moving?

这里是 C# 初学者。

我正在制作 2D 坦克游戏,到目前为止一切顺利。 我的两个坦克都是图片框,我的导弹也是。 PictureBoxes 中导弹和坦克的图像具有透明的 BackColour 属性。问题是,导弹和坦克的背景在另一个图片框(pbBackground)之上时不透明。看起来像 this.

我知道使用不同的 PB 是一种低效的方法,但我已经走了很远而且我真的不知道更好。无论如何,如您所见,导弹和坦克 PB 背景显示了形状颜色。当我下载图片时,背景是透明的,我敢肯定。我如何着手使我的 PB 的背景真正透明? (匹配Overlapped PB的背景?)

我看到了 但它与我的场景不符,我不明白解决方案。

更新: 好吧,我听从了 Tommy 的建议,这是在不断改变 MissileX 和 MissileY 的计时器中沿着 pbBackground 移动它的正确方法吗?目前这没有任何作用。

 using (Graphics drawmissile = Graphics.FromImage(pbBackground.Image))
        {
            drawmissile.DrawImage(pbMissile.Image, new Point(MissileX,Convert.ToInt32(MissileY)));
        }

不要将多个 PictureBox 实例叠加在一起。它会很快变得非常混乱。

相反,使用一个 PictureBox 并使用 Paint 将图像绘制到它上面。通过这种方式,您可以更好地控制发生的图形操作。

看看this

private void DrawIt()
{
    System.Drawing.Graphics graphics = this.CreateGraphics();
    System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
       50, 50, 150, 150);
    graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
    graphics.DrawRectangle(System.Drawing.Pens.Red, rectangle);
}

在此示例中,他们演示了如何将形状直接绘制到窗体上。你会在那里使用你的 PictureBox 。还可以画图。

有很多方法可以使用 System.Drawing.Graphics 对象在表单上绘制形状。尝试查看 this 问题进行比较。

PictureBox 是不透明的。而 PictureBox 效率不高。

做游戏,你应该研究直接在你的窗体上绘制的Paint事件。

Bitmap backgroundBitmap = new Bitmap("background");
Bitmap tankBitmap = new Bitmap("tank");

private void Form1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(backgroundBitmap, 0, 0);
    e.Graphics.DrawImage(tankBitmap, 30, 30);
}

private void timer1_Tick(object sender, EventArgs e)
{
    this.Invalidate(); //trigger Form1_Paint to draw next frame
}

Tommy 的回答是正确的,但是,如果您死定了 使用图片框(一个坏主意),请设置重叠picturebox backgroundcolour 到 Transparent 和 Form 的背景到任何图像。 TIL Transparent BackColour 仅使用颜色/图像形式。 Tommy 实际上在这里有正确的答案,但这是我解决问题的方法(懒惰的方式)。