繁体   English   中英

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

[英]PictureBox background equal to other PictureBox while moving?

C#初学者在这里。

我正在制作2D Tanks游戏,到目前为止一切工作都很好。 我的两个坦克都是图片框,我的导弹也是。 PictureBox中的导弹和坦克图像具有透明的BackColour属性。 问题是,导弹和坦克的背景在另一个图片框(pbBackground)上方时不透明。 看起来像这样

我知道使用不同的PB是解决此问题的低效方法,但是我已经走得很远了,我真的不知道更好。 无论如何,如您所见,“导弹”和“坦克PB”的背景显示了表格颜色。 当我下载图像时,背景是透明的,我确定。 如何使PB的背景真正透明? (要匹配重叠PB的背景吗?)

我看到了这一点,但它与我的情况并不完全匹配,我也不了解解决方案。

在此先感谢您的帮助。

更新:好的,我遵循汤米的建议,这是在不停地更改MissileX和MissileY的计时器中沿pbBackground移动它的正确方法吗? 目前,这没有任何作用。

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

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
}

不要将多个PictureBox实例彼此叠加。 它将很快变得非常混乱。

取而代之的是,使用一个PictureBox并使用Paint将图像绘制到其中。 这样,您可以更好地控制正在发生的图形操作。

看看这个

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);
}

在此示例中,他们演示了如何直接在Form上绘制形状。 您可以在那里使用PictureBox。 您也可以绘制图像。

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

汤米的答案是正确的 ,但是,如果你在使用pictureboxes(一个坏主意) 死心塌地 ,设置重叠PictureBox的backgroundcolour以透明和窗体的背景图像什么。 直到透明BackColour才使用颜色/图像形式。 汤米实际上在这里有正确的答案,但这就是我为解决问题所做的(懒惰的方式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM