我正试图在暴徒和玩家之间写下一个碰撞,所以我试图将两个怪物添加到一个矩形
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'不会碰撞。我应该将它们分开并检查每一个是否发生碰撞?
答案 0 :(得分:0)
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的大小合在一起,除非它们都靠得很近并且是"一个"形成。 (就像一个有屋顶的房子,每个都单独建模但是它们一起移动/保持在一起 - 虽然箱子对屋顶没有多大意义)。
创建一个占用一个暴徒的方法可能会更好,并检查玩家是否发生碰撞:
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
作为要检查的属性。如果拳头检查是否为假,则此检查将计算玩家矩形两次,组合方法不会这样但是更清楚。