我认为这个问题是由您对游戏speedRight中playerRect某处所做的一些更改引起的。因此,如果您使用 VisualStudio,只需设置断点并检查speedRight和playerRect值。
尽管您应该对游戏进行一些更改。Player首先,您应该在类的类型Texture中创建一个公共字段Spike,然后创建另一个类型Vector2的字段,指示速度和方向:
public class Player{
public Vector2 DirectionSpeed;
public Texture2D Texture;
//...
public Player(){
//initialize your fields
}
}
然后您可以使用以下方法处理碰撞Intersects():
if(player.Texture.Bounds.Intersects(spike.Bounds)){
player.DirectionSpeed = Vector.Zero;
}
如果您尝试处理与多个 type 对象的冲突Spike,则必须创建一个List<Spike>然后用 cicle 迭代整个列表:
foreach(Spike s in listSpikes){
if(player.Texture.Bounds.Intersects(s.Bounds)){
player.DirectionSpeed = Vector.Zero;
}
}
编辑:
此外,如果speedRight不等于 1 或spikesRect.Left - 1它的约数,很明显通过增加它的位置playerRect.Right超过spikesRect.Left - 1. 一个解决方案可能是:
if (playerRect.Right > spikesRect.Left - 1)
{
playerRect.Location = spikesRect.Left - playerRect.Width - 1;
speedRight = 0;
}