SFML 2.5.1 的问题:碰撞检测不起作用
Problem with SFML 2.5.1: Collision Detection not working
你能帮我看看我做错了什么吗?
我在 YT 上学习了这个教程:https://www.youtube.com/watch?v=l2iCYCLi6MU&t=605s
进行碰撞检测,但我的企鹅似乎通过了我的 objects。我很沮丧。
我使用的sfml版本是2.5.1。我使用 Visual Studio 2017.
我保证,我在此处链接的文件中没有病毒。
https://drive.google.com/drive/folders/16vl1Kkv-O5IRb8Svu71qLPXRkn3eINf1?usp=sharing
(更新 - 我通过替换
解决了这个问题
float intersectX = abs(deltax) - (otherHalfSize.x + thisHalfSize.x);
float intersectY = abs(deltay) - (otherHalfSize.y + thisHalfSize.y);
所以我把减号改成了加号,但现在推的顺序只能从底部和右边开始,但是当我试图向左推时,object 立即站在角色的头上.我失败了什么?
有些人对病毒持怀疑态度,所以我只粘贴代码:
这是 header 对撞机
的代码
观看视频并告诉我我可能做错了什么。
sf::Vector2f otherPosition = other.getPosition();
sf::Vector2f otherHalfSize = other.gethalfsize();
sf::Vector2f thisPosition = getPosition();
sf::Vector2f thisHalfSize = gethalfsize();
float deltax = otherPosition.x - thisPosition.x;
float deltay = otherPosition.y - thisPosition.y;
float intersectX = abs(deltax) - (otherHalfSize.x + thisHalfSize.x);
float intersectY = abs(deltay) - (otherHalfSize.y + thisHalfSize.y);
if (intersectX < 0.0f and intersectY < 0.0f)
{
push = std::min(std::max(push, 0.0f), 1.0f);
if (intersectX > intersectY) // ricordo che adesso stiamo utilizzando numeri negativi
{
if (deltax > 0.0f)
{
Move(intersectX * (1.0f - push), 0.0f);
other.Move(-intersectX * push, 0.0f);
}
else
{
Move(intersectX * (1.0f - push), 0.0f);
other.Move(intersectX * push, 0.0f);
}
}
else
{
if (deltay > 0.0f)
{
Move(0.0f, intersectY * (1.0f - push));
other.Move(0.0f, -intersectY * push);
}
else
{
Move(0.0f, intersectY * (1.0f - push));
other.Move(0.0f, intersectY * push);
}
}
return true;
}
return false;
我发现了问题:
我需要改变这个:
Move(intersectX * (1.0f - push), 0.0f);
对此:
Move(-intersectX * (1.0f - push), 0.0f);
Y轴相同。
我整晚都在找这个愚蠢的错误。
你能帮我看看我做错了什么吗?
我在 YT 上学习了这个教程:https://www.youtube.com/watch?v=l2iCYCLi6MU&t=605s 进行碰撞检测,但我的企鹅似乎通过了我的 objects。我很沮丧。
我使用的sfml版本是2.5.1。我使用 Visual Studio 2017.
我保证,我在此处链接的文件中没有病毒。 https://drive.google.com/drive/folders/16vl1Kkv-O5IRb8Svu71qLPXRkn3eINf1?usp=sharing
(更新 - 我通过替换
解决了这个问题
float intersectX = abs(deltax) - (otherHalfSize.x + thisHalfSize.x);
float intersectY = abs(deltay) - (otherHalfSize.y + thisHalfSize.y);
所以我把减号改成了加号,但现在推的顺序只能从底部和右边开始,但是当我试图向左推时,object 立即站在角色的头上.我失败了什么?
有些人对病毒持怀疑态度,所以我只粘贴代码:
这是 header 对撞机
的代码观看视频并告诉我我可能做错了什么。
sf::Vector2f otherPosition = other.getPosition();
sf::Vector2f otherHalfSize = other.gethalfsize();
sf::Vector2f thisPosition = getPosition();
sf::Vector2f thisHalfSize = gethalfsize();
float deltax = otherPosition.x - thisPosition.x;
float deltay = otherPosition.y - thisPosition.y;
float intersectX = abs(deltax) - (otherHalfSize.x + thisHalfSize.x);
float intersectY = abs(deltay) - (otherHalfSize.y + thisHalfSize.y);
if (intersectX < 0.0f and intersectY < 0.0f)
{
push = std::min(std::max(push, 0.0f), 1.0f);
if (intersectX > intersectY) // ricordo che adesso stiamo utilizzando numeri negativi
{
if (deltax > 0.0f)
{
Move(intersectX * (1.0f - push), 0.0f);
other.Move(-intersectX * push, 0.0f);
}
else
{
Move(intersectX * (1.0f - push), 0.0f);
other.Move(intersectX * push, 0.0f);
}
}
else
{
if (deltay > 0.0f)
{
Move(0.0f, intersectY * (1.0f - push));
other.Move(0.0f, -intersectY * push);
}
else
{
Move(0.0f, intersectY * (1.0f - push));
other.Move(0.0f, intersectY * push);
}
}
return true;
}
return false;
我发现了问题:
我需要改变这个:
Move(intersectX * (1.0f - push), 0.0f);
对此:
Move(-intersectX * (1.0f - push), 0.0f);
Y轴相同。 我整晚都在找这个愚蠢的错误。