移动时 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 实际上在这里有正确的答案,但这是我解决问题的方法(懒惰的方式)。
这里是 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 实际上在这里有正确的答案,但这是我解决问题的方法(懒惰的方式)。