C++ 我的自上而下赛车游戏的碰撞分辨率不';不太管用
为可怜的英国人感到抱歉 我正在做一个自上而下的赛车游戏的碰撞解决方案。 碰撞检测由包含两种颜色(白色为墙,黑色为非墙)的图像进行。我只是看看球员(汽车)的中间位置是否在图像上的白色内 这部分很好用 在解决问题时,我遇到了一些奇怪的问题。 我被支持确保汽车停在轨道上,不能离开轨道 我的解决方案是这样的: 1.创建一个名为“距离”的向量,该向量包含当前位置到上一个位置的减法 2.将0和1之间的距离向量归一化 3.将该归一化距离向量减去当前位置,直到玩家不在白色上。 4.取消玩家的速度(我不打算保持这样) 这在我的脑海里听起来不错,但当我应用它时,我会出现一些分割错误,有时还会出现一些隐形传送 下面的代码是使用SFML库编写的,这是我试图进行冲突的尝试。末尾的player.update()调用仅移动和旋转汽车C++ 我的自上而下赛车游戏的碰撞分辨率不';不太管用,c++,collision,game-physics,sfml,racing,C++,Collision,Game Physics,Sfml,Racing,为可怜的英国人感到抱歉 我正在做一个自上而下的赛车游戏的碰撞解决方案。 碰撞检测由包含两种颜色(白色为墙,黑色为非墙)的图像进行。我只是看看球员(汽车)的中间位置是否在图像上的白色内 这部分很好用 在解决问题时,我遇到了一些奇怪的问题。 我被支持确保汽车停在轨道上,不能离开轨道 我的解决方案是这样的: 1.创建一个名为“距离”的向量,该向量包含当前位置到上一个位置的减法 2.将0和1之间的距离向量归一化 3.将该归一化距离向量减去当前位置,直到玩家不在白色上。 4.取消玩家的速度(我不打算保持这
void RacingMode::update(const sf::Time& deltaTime)
{
static sf::Vector2f prevPos(0,0);
static sf::Vector2f currPos(0,0);
currPos = sf::Vector2f(player.getPosition().x, player.getPosition().y);
if(raceTrack.getPixelColor(sf::Vector2u(currPos.x, currPos.y)) != sf::Color::Black){
sf::Vector2f dist;
dist.x = currPos.x - prevPos.x;
dist.y = currPos.y - prevPos.y;
dist.x = dist.x / sqrt(dist.x*dist.x + dist.y*dist.y);
dist.y = dist.y / sqrt(dist.x*dist.x + dist.y*dist.y);
sf::Vector2f newPos(0,0);
float i = 0.0;
do{
newPos = currPos - dist*i;
i+= 0.01;
}while(raceTrack.getPixelColor(sf::Vector2u(newPos.x, newPos.y)) != sf::Color::Black);
currPos = newPos;
player.setPosition(newPos);
player.setVelocity(0);
}
prevPos = currPos;
player.update(deltaTime);
}
如果有人能指出我的尝试是如何失败的(或者可以提出其他解决问题的方法),我将不胜感激。当您在调试器中运行它时,它会在哪里崩溃?另外,“为什么我的代码不起作用”需要一个。。如果崩溃的原因不在提供的代码范围内,则发布一小部分崩溃的代码没有帮助。使用调试器,它会在getPixelColor函数调用时崩溃。考虑到我只能传递一个无符号的int向量,这很有意义。由于y值突然变为429…(无符号int的最大值),可能在某个地方出现了一些负值。对不起,我不尊重“最小完整和可验证的示例”,我对stackoverflow的问题很陌生。只要看一下调试器,我就可以得到答案