碰撞似乎不起作用
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 两次,组合方法不会,但这样更清楚。
我想写一个生物和玩家之间的碰撞,所以我想把两个生物都添加到一个矩形中
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 两次,组合方法不会,但这样更清楚。