碰撞似乎不起作用

Collission doesn't seem to work

我想写一个生物和玩家之间的碰撞,所以我想把两个生物都添加到一个矩形中

   protected bool Collide()
    {

        PlayerRect = new Rectangle((int)playerPos.X, (int)playerPos.Y, playerFrameSize.X, playerFrameSize.Y);
        MobsRect = new Rectangle((int)greenMobPos.X + (int)orangeMobPos.X, (int)greenMobPos.Y + (int)orangeMobPos.Y, greenMobFrameSize.X + orangeMobFrameSize.X, greenMobFrameSize.Y + orangeMobFrameSize.Y);

        return PlayerRect.Intersects(MobsRect);
    }

那是我的代码,但只有我的 'greenMob' 正确碰撞,第二个生物 'orangeMob' 不会碰撞。我是否应该将它们分开并检查它们是否发生碰撞?

protected bool Collide()
{

    PlayerRect = new Rectangle((int)playerPos.X, (int)playerPos.Y, playerFrameSize.X, playerFrameSize.Y);
    MobsRectGreen = new Rectangle((int)greenMobPos.X , (int)greenMobPos.Y , greenMobFrameSize.X , greenMobFrameSize.Y ;
    MobsRectOrange = new Rectangle((int)orangeMobPos.X,  (int)orangeMobPos.Y,  orangeMobFrameSize.X, orangeMobFrameSize.Y);

    return PlayerRect.Intersects(MobsRectGreen ) || return PlayerRect.Intersects(MobsRectOrange )  ;
}

您计算每个生物和您的玩家的边界框。如果你的球员与果岭边界框相交,它就会与绿色球员发生碰撞。如果它与橙色边界框相交,它就会与那个边界框发生碰撞。 || 表示逻辑或。

您的检查将绿色和橙色 X 加在一起,将 y 加在一起,将 x+y 中的大小加在一起,这没有多大意义,除非它们靠得很近并且是 "one" 形式。 (即像一个有屋顶的房子,每个单独建模,但它们 move/stay 在一起 - 虽然盒子对屋顶没有多大意义)。

创建一个接受一个生物并检查玩家是否碰撞的方法可能会更好:

private bool CollideWithMob(Mob m)
{
    // do the check for player and m here
}

protected bool Collide()
{
    return CollideWithMob(greenMob) || CollideWithMob(orangeMob); 
}

并将 Pos 和 FrameSize 放入 class Mob 作为属性进行检查。如果第一次检查是否为 false ,则此检查将计算播放器 Rectangle 两次,组合方法不会,但这样更清楚。