图片框生成和重叠 WINFORMS C# 的问题
Problem with pictureboxes spawning and overlapping WINFORMS C#
我不希望图片框相互生成或重叠。
以下是创建循环的方法,它会选择一个不与任何其他现有敌人相交的随机位置:
Rectangle rc1;
Rectangle rc2;
bool intersected;
do
{
intersected = false;
tempx = random.Next(1, 701);
Gegner.Location = new Point(tempx, 12);
rc1 = new Rectangle(Gegner.Location, Gegner.Size);
foreach(PictureBox pb in gengerList)
{
rc2 = new Rectangle(pb.Location, pb.Size);
if (rc1.IntersectsWith(rc2))
{
intersected = true;
break;
}
}
} while (intersected);
// don't add new PB to list until AFTER
//you've made sure it doesn't intersect with any others
gengerList.Add(Gegner);
注意底部的评论。确保在确保新 PB 不与其他已经存在的 PB 相交之前,不要将新 PB 添加到列表中。如果你事先添加它,那么它会与自身相交并卡在循环中。
如果它仍然卡住,则无法在您指定的区域中放置该数量的 PB,因为它们的放置位置是随机的。在这种情况下,re-think 尺寸 and/or 使用不同的方法来放置它们。
我不希望图片框相互生成或重叠。
以下是创建循环的方法,它会选择一个不与任何其他现有敌人相交的随机位置:
Rectangle rc1;
Rectangle rc2;
bool intersected;
do
{
intersected = false;
tempx = random.Next(1, 701);
Gegner.Location = new Point(tempx, 12);
rc1 = new Rectangle(Gegner.Location, Gegner.Size);
foreach(PictureBox pb in gengerList)
{
rc2 = new Rectangle(pb.Location, pb.Size);
if (rc1.IntersectsWith(rc2))
{
intersected = true;
break;
}
}
} while (intersected);
// don't add new PB to list until AFTER
//you've made sure it doesn't intersect with any others
gengerList.Add(Gegner);
注意底部的评论。确保在确保新 PB 不与其他已经存在的 PB 相交之前,不要将新 PB 添加到列表中。如果你事先添加它,那么它会与自身相交并卡在循环中。
如果它仍然卡住,则无法在您指定的区域中放置该数量的 PB,因为它们的放置位置是随机的。在这种情况下,re-think 尺寸 and/or 使用不同的方法来放置它们。