我认为这个问题是由您对游戏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;
}