gpt4 book ai didi

c# - MonoGame 中用于碰撞检测的矩形原点

转载 作者:行者123 更新时间:2023-11-30 23:16:25 26 4
gpt4 key购买 nike

我在游戏中遇到 2D 碰撞检测问题。
问题是我的播放器的矩形没有正确地注册与其他对象的矩形的交点。

我想知道我用来旋转播放器的 origin 变量是否与我的问题有任何关系,以及如何解决它。

我会更详细地解释这个问题,但首先是我的代码:注意:Origin 是 Vector2 类型,angle 是 float 类型,所有碰撞矩形都是 Rectangle 类型。

//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;
}
}
}
}
}

此代码的问题是,我的播放器只有在播放到一半时才会与墙壁发生碰撞。我还没有为右侧、上下侧实现碰撞,只为左侧实现碰撞。

这是它的样子: enter image description here

提前感谢任何能帮我回答这个问题的人。如果您需要更多信息,请告诉我。

最佳答案

您的代码按照您的指示运行

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;

关于c# - MonoGame 中用于碰撞检测的矩形原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42018738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com