C# 碰撞成功了,但我没有';I don’我不知道怎么知道讨论的方向
我用我的地图做了一个碰撞,碰撞工作,但是当我的玩家发生碰撞时,我停止了玩家的移动,他不走了,因为我不知道如何在一个方向上停止玩家 这是播放器和地图下的我的代码冲突C# 碰撞成功了,但我没有';I don’我不知道怎么知道讨论的方向,c#,collision-detection,monogame,tiled,C#,Collision Detection,Monogame,Tiled,我用我的地图做了一个碰撞,碰撞工作,但是当我的玩家发生碰撞时,我停止了玩家的移动,他不走了,因为我不知道如何在一个方向上停止玩家 这是播放器和地图下的我的代码冲突 public bool IsCollisionTile(Rectangle player) { foreach(Rectangle rect in this._collisionObject) { if (rect.Intersects(player)) { re
public bool IsCollisionTile(Rectangle player)
{
foreach(Rectangle rect in this._collisionObject)
{
if (rect.Intersects(player))
{
return true;
}
}
return false;
}
玩家不移动的代码在Game1类中
if (mapLoader.IsCollisionTile(player.getDestinationRect()))
{
player.setCantWalk(true);
}
它是类Player.cs中的函数update和setCantWalk
private bool _cantWalk;
public void Update()
{
this._destinationRectangle.X = (int)_position.X;
this._destinationRectangle.Y = (int)_position.Y;
this._destinationRectangle.Width = _texture.Width;
this._destinationRectangle.Height = _texture.Height;
if(Keyboard.GetState().IsKeyDown(Keys.Up))
{
if (_cantWalk == false)
{
_position.Y--;
}
}
else if (Keyboard.GetState().IsKeyDown(Keys.Down))
{
if (_cantWalk == false)
{
_position.Y++;
}
}
else if (Keyboard.GetState().IsKeyDown(Keys.Right))
{
if (_cantWalk == false)
{
_position.X++;
}
}
else if (Keyboard.GetState().IsKeyDown(Keys.Left))
{
if (_cantWalk == false)
{
_position.X--;
}
}
}
public void setCantWalk(bool walk)
{
_cantWalk = walk;
}
想帮助我对于更简单的方法,您需要记录对象的移动。因此,在检查重叠时,您知道是什么运动导致了重叠。然后,为该对象设置变量cantWalkX或cantWalkY
更好的解决方案是检查碰撞表面以确定障碍物。这要求您更改“相交”例程以返回相交对象,并根据其相对位置防止在该方向上移动。例如,如果碰撞对象位于对象的右侧,请设置cantWalkXPositive。如果左侧有另一个,请将cantWalkXNegative设置为true等。对于更简单的方法,您需要保留对象移动的记录。因此,在检查重叠时,您知道是什么运动导致了重叠。然后,为该对象设置变量cantWalkX或cantWalkY
更好的解决方案是检查碰撞表面以确定障碍物。这要求您更改“相交”例程以返回相交对象,并根据其相对位置防止在该方向上移动。例如,如果碰撞对象位于对象的右侧,请设置cantWalkXPositive。如果左侧有另一个,请将cantWalkXNegative设置为true等。您可以尝试在X轴上移动播放机,进行碰撞检查,然后在Y轴上再次进行检查,并恢复导致检查的任何一个。。。看起来不太理想,但这是一个选项你好,但我是一个初学者,我不知道怎么做。你可以尝试在X轴上移动你的播放器,进行碰撞检查,然后在Y轴上再次进行检查,并恢复导致检查的任何一个。。。看起来不太理想,但这是一个选择你好,但我是一个初学者,我不知道怎么做