我在游戏中的 2D 碰撞检测方面遇到了一些问题。
问题是我的玩家的矩形没有正确注册与其他对象的矩形的交集。
我想知道我用来旋转播放器的原点变量是否与我的问题有关,以及我如何解决它。
我将更详细地解释这个问题,但首先是我的代码:注意:原点是Vector2类型,角度是float类型,所有碰撞矩形都是矩形类型。
//Player.Update method
//origin needs to be in update, because position of source changes for every frame of animation
origin = new Vector2(Width / 2, Height / 2);
playerDirection = new Vector2((float)Math.Sin(angle), (float)Math.Cos(angle));
//Updating the position of my collision rectangle
collisionRect.X = (int)position.X;
collisionRect.Y = (int)position.Y;
//Changing the values of angle while key is pressed
if (Keyboard.GetState().IsKeyDown(Keys.A))
{
angle -= 0.05f;
}
if (Keyboard.GetState().IsKeyDown(Keys.D))
{
angle += 0.05f;
}
//Updating player's position
if (Keyboard.GetState().IsKeyUp(Keys.X))
{
keyPress = false;
}
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
position -= playerDirection * Speed;
}
if (Keyboard.GetState().IsKeyDown(Keys.S))
position += playerDirection * Speed;
//Checking for collision detection with background objects
if(BackgroundMaker.collisionPositions.Count >= 1)
{
foreach(Rectangle colPos in BackgroundMaker.collisionPositions)
{
if(collisionRect.Intersects(colPos))
{
if (collisionRect.X < colPos.Right)
position.X = colPos.Right;
}
}
}
}
}
这段代码的问题在于,我的玩家只有在中途才能与墙壁发生碰撞。我还没有对右侧,上下侧实施碰撞,仅对左侧实施碰撞。
提前感谢能帮我回答这个问题的人。如果你需要进一步的信息,请让我知道。
您的代码正在按照您的指示工作
if (collisionRect.X < colPos.Right)
position.X = colPos.Right;
这里你检查的是,如果碰撞框的中间小于物体的右侧,则将玩家的中间位置设置为物体的右侧,因此玩家的中间不能比它相交的物体走得更远。
然而,这并不考虑球员的宽度
您需要调整代码以使其更像这样工作:
float halfWidth = 16.0f; // ideally add a width to the player class and divide by 2
if (collisionRect.X - halfWidth < colPos.Right)
position.X = colPos.Right + halfWidth;
问题内容: 我遇到一个问题,即一个矩形与另一个矩形发生碰撞。所以我的问题是,如何获取相交方法以检查碰撞?还是在这种情况下还有其他方法可以处理碰撞? 我正在创建一个回合制战斗游戏(类似于《最终幻想》或《龙骑传奇》),其中玩家的角色在屏幕的右侧,而敌人在屏幕的左侧。玩家和敌人轮流进攻。因此,当玩家攻击时,子画面动画会从右到左在屏幕上移动,直到停在敌人面前,进行攻击并返回到其起始坐标。玩家和敌人周围都有
我遇到了一个问题,显示一个矩形与另一个矩形发生了碰撞。所以我的问题是,如何让Intersect方法检查碰撞?或者在这种情况下有其他方法来处理碰撞吗? 我正在制作一个回合制战斗游戏(类似于《最终幻想》或《龙骑兵传说》),其中玩家的角色位于屏幕的右侧,敌人位于屏幕左侧。玩家和敌人轮流攻击。因此,当玩家攻击时,精灵动画会在屏幕上从右向左移动,直到它停在敌人面前,攻击并返回到其起始坐标。玩家和敌人都有一个
所以我明白,我现在没有用最好的方式来编写这个代码;这是一种测试运行。我正在尝试使用矩形和intersects属性进行墙碰撞(抱歉,如果我没有使用正确的术语)。到目前为止,我有2个矩形在屏幕上。1玩家控制和游戏中与之冲突的其他玩家。当它们碰撞时,玩家停止移动。问题是,如果玩家试图移动到矩形,而他们已经碰撞,那么玩家不能在垂直于移动的任何方向移动,即如果玩家拿着右箭头键移动到矩形,那么他们不能向上或向
我正在编写一个游戏,涉及碰撞的一个移动的圆,由用户控制,和一个移动的矩形,由计算机控制。 完整的代码可以在这里找到:游戏 我在圆和矩形之间的碰撞检测方面遇到了麻烦。当矩形是静态的,碰撞检测工作完美。当圆和矩形的边缘在任一边接触时,程序就会按照它应该的方式进行操作。 这是碰撞检测功能。 谢谢。
在我的自上而下游戏中,当我的玩家通过婴儿床时,我该如何让他发生碰撞?我用的是交叉矩形。 这是我的密码 更新方法 在渲染方法中 这是完整的代码 谁能告诉我矩形碰撞检测的正确实现是什么?没有重叠,我是这个框架的新手。致谢和预付款:)
因此,我创建了一个方法来检测球形球和矩形球之间的碰撞。我把它分成了4部分;它检测圆的顶部、圆的左侧、圆的底部、圆的右侧和矩形之间的碰撞。其中的两个工作是检测圆上的左点和矩形之间的碰撞,以及检测圆上的右点和矩形之间的碰撞。但是,不起作用的是,如果最上面的点或最下面的点接触矩形,就不会检测到碰撞,正如我记录if语句以查看是否输入它时所看到的那样。下面是我的代码(方法。getr()获取圆圈半径): 我已