对不起,我是一个新手 - 我已经找到了答案,但没有什么能与我正在做的完全匹配。
我有一个基本的箭头控制迷宫游戏,带有“墙壁”标签,名为Label1,Label2等。
当我按下一个键时,它会检测角色和墙壁之间的交叉点。
我目前正在使用大型嵌套if,如下所示:
if (PBoxPlayer.Bounds.IntersectsWith(LblWall1.Bounds))
{
PBoxPlayer.Location = new Point(CurrX - 10, CurrY);
}
else if (PBoxPlayer.Bounds.IntersectsWith(LblWall2.Bounds))
{
PBoxPlayer.Location = new Point(CurrX - 10, CurrY);
}
else if (PBoxPlayer.Bounds.IntersectsWith(LblWall3.Bounds))
{
PBoxPlayer.Location = new Point(CurrX - 10, CurrY);
}
但这变得非常混乱。
有没有办法可以说 - 如果玩家击中'任意'墙,然后将其移回原位?
我意识到上面的代码可能是一种糟糕的方式,但我对屏幕上的操作感到满意,而不是背后的重复代码。
答案 0 :(得分:1)
首先将所有“碰撞有趣”的对象放入集合中,例如:
var walls = new[] { LblWall1, LblWall2, LblWall3 };
一定有更好的方法来做到这一点,但这并不明显,因为没有这方面的背景。所以记住这一点,让我们继续。
拥有集合中的所有对象使您可以使用LINQ:
var collision = walls.Any(w => PBoxPlayer.Bounds.IntersectsWith(w.Bounds));
if (collision) {
// adjust location
}
如果玩家碰撞的墙壁本身是一个有用的信息,您可以使用另一种变体:
var collidedWith = walls.FirstOrDefault(
w => Bounds.IntersectsWith(w.Bounds));
if (collidedWith !== null) {
// collidedWith is the wall we ran into
}