C++ 我的自上而下赛车游戏的碰撞分辨率不';不太管用

C++ 我的自上而下赛车游戏的碰撞分辨率不';不太管用,c++,collision,game-physics,sfml,racing,C++,Collision,Game Physics,Sfml,Racing,为可怜的英国人感到抱歉 我正在做一个自上而下的赛车游戏的碰撞解决方案。 碰撞检测由包含两种颜色(白色为墙,黑色为非墙)的图像进行。我只是看看球员(汽车)的中间位置是否在图像上的白色内 这部分很好用 在解决问题时,我遇到了一些奇怪的问题。 我被支持确保汽车停在轨道上,不能离开轨道 我的解决方案是这样的: 1.创建一个名为“距离”的向量,该向量包含当前位置到上一个位置的减法 2.将0和1之间的距离向量归一化 3.将该归一化距离向量减去当前位置,直到玩家不在白色上。 4.取消玩家的速度(我不打算保持这

为可怜的英国人感到抱歉

我正在做一个自上而下的赛车游戏的碰撞解决方案。 碰撞检测由包含两种颜色(白色为墙,黑色为非墙)的图像进行。我只是看看球员(汽车)的中间位置是否在图像上的白色内

这部分很好用

在解决问题时,我遇到了一些奇怪的问题。 我被支持确保汽车停在轨道上,不能离开轨道

我的解决方案是这样的: 1.创建一个名为“距离”的向量,该向量包含当前位置到上一个位置的减法 2.将0和1之间的距离向量归一化 3.将该归一化距离向量减去当前位置,直到玩家不在白色上。 4.取消玩家的速度(我不打算保持这样)

这在我的脑海里听起来不错,但当我应用它时,我会出现一些分割错误,有时还会出现一些隐形传送

下面的代码是使用SFML库编写的,这是我试图进行冲突的尝试。末尾的player.update()调用仅移动和旋转汽车

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的问题很陌生。只要看一下调试器,我就可以得到答案