【问题标题】:PictureBox background equal to other PictureBox while moving?移动时PictureBox背景等于其他PictureBox?
【发布时间】:2016-06-14 16:53:11
【问题描述】:

这里是 C# 初学者。

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

我知道使用不同的 PB 是一种低效的方法,但我已经走了很远,我真的不知道有什么更好的。无论如何,如您所见,Missile 和 Tank PB 背景显示形状颜色。当我下载图像时,背景是透明的,我敢肯定。如何让我的 PB 的背景真正透明? (匹配Overlapped PB的背景?)

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

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

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

【问题讨论】:

    标签: c# picturebox


    【解决方案1】:

    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
    }
    

    【讨论】:

    • 太棒了,但我要如何在计时器滴答声中移动导弹图像图形?
    • e.Graphics.DrawImage(tankBitmap, x, y);并在计时器滴答声中更改 (x, y)
    【解决方案2】:

    不要将多个 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 问题进行比较。

    【讨论】:

    【解决方案3】:

    Tommy 的回答是正确的,但是,如果您对使用图片框(一个坏主意)死心塌地,请将重叠的图片框背景颜色设置为 透明 和窗体的背景到任何图像。 TIL 透明背景色只使用表单颜色/图像。 Tommy 实际上在这里有正确的答案,但这是我为解决我的问题所做的(懒惰的方式)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多