这里是C#初学者。
我正在制作一个2D坦克游戏,到目前为止一切都很顺利。我的两个坦克都是图片盒,我的导弹也是。导弹和坦克在PictureBoxes中的图像具有透明的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)));
}发布于 2016-06-14 17:09:33
PictureBox是不透明的。PictureBox效率不高。
在制作游戏时,你应该学习直接使用你的表格的绘画事件。
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
}发布于 2016-06-14 17:06:18
不要将多个PictureBox实例放在彼此之上。很快就会变得很混乱。
相反,使用一个PictureBox并使用画图将图像绘制到它上。这样,您可以对正在发生的图形操作有更多的控制。
看看这
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对象在窗体上绘制形状。试着看看这问题来比较一下。
发布于 2016-06-15 14:13:06
的答案是正确的,但是,如果您是死集使用画框(一个坏主意),设置重叠的picturebox背景颜色为透明和表单的背景为任何图像。直到透明的BackColour只使用形式的颜色/图像。Tommy实际上在这里找到了正确的答案,但这是我为解决问题所做的(懒惰的方式)。
https://stackoverflow.com/questions/37817949
复制相似问题