【问题标题】:C# Collision Detection with PictureBox使用 PictureBox 进行 C# 碰撞检测
【发布时间】:2016-03-03 20:04:53
【问题描述】:

我有一个程序可以在点击表单时添加图片框,但我想确保图片框不会与任何现有图片框重叠。

目前我有

PictureBox PB = new PictureBox();
PB.Name = "Table " + number;
PB.BackgroundImage = Image.FromFile("C:\\table.png");
PB.Size = new Size(65,65);

//x = x + 70;
//y = y + 50;
PB.Location = new Point(LocX, LocY);
PB.MouseDoubleClick += new MouseEventHandler(this.PB_DoubleClick);
foreach (Control picturebox in this.Controls)
{
    if (PB.Bounds.IntersectsWith(picturebox.Bounds))
    {
        //Collision
    }
    else
    {
        this.Controls.Add(PB);
        
    }
}

但是控件仍然可以相互重叠,请参阅:

很明显,我没有在代码中做一些事情,但我看不到什么?

【问题讨论】:

  • 你把这段代码放在哪里了?您希望这发生在 design 时还是 run 时?

标签: c# picturebox collision


【解决方案1】:

您的 foreach 是错误的,因为每次图片框不相交时,您都会添加新框,但另一个可能会这样做,请尝试这样的操作:

bool pBDoIntersect;

 foreach (Control picturebox in this.Controls)
        {
            if (PB.Bounds.IntersectsWith(picturebox.Bounds))
            {
                pBDoIntersect=true;
            }
        }

if(!pBDoIntersect)this.Controls.Add(PB);

【讨论】:

  • 我建议解释为什么 OP 正在做的事情不起作用,以及您的答案如何解决它。
  • 感谢您的回答!当我运行您的更改时,它不允许我单击表单上的任何位置?
  • 更进一步我相信这是因为如果我在现有项目的范围内单击,布尔值会被设置为始终为真,但是如果我使用 else 重置它会回到我原来的问题?
  • 不允许是什么意思?如果您使用它超过一次,则必须在添加图片框后将 bool 设置为 false
猜你喜欢
  • 2019-09-17
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多