Ive刚开始关注SFML 2.1,我想制作一个Pong游戏。但是我遇到了一个问题,我无法设法进行碰撞检测。当检测到碰撞时,即使球停在任何地方,球也会移动到另一个位置。这是您需要的代码(对不起,英语不好,不是我的母语):

bool Game::collision()
{
    if (mPlayer.getGlobalBounds().intersects(mBall.getGlobalBounds()))
    {
        mBall.setFillColor(sf::Color::Green);
        score++;
        std::cout << score << std::endl;
        return true;
    }
    else
        return false;
}
void Game::update(sf::Time deltaTime)
{
    sf::Vector2f movement(0.f, 0.f);

    if (mIsMovingLeft)
        movement.x -= PlayerSpeed;
    if (mIsMovingRight)
        movement.x += PlayerSpeed;

    sf::Vector2f gravity(0.f, 4.f);

    mPlayer.move(movement * deltaTime.asSeconds());

    mBall.move(gravity);

    if (collision() == true) {
        mBall.setFillColor(sf::Color::Green);
    }
}
void Game::render()
{
    mWindow.clear(sf::Color::White);
    mWindow.setFramerateLimit(60);
    mWindow.draw(mPlayer);
    mWindow.draw(mBall);
    mWindow.display();
}

最佳答案

您需要使每个形状都为floatrect:

sf::floatrect mBallCollide;
sf::floatrect mplayerCollide;

然后每次它们变换时,将float rect设置为它们:
mBallCollide = mBall.getGlobalBounds();
mPlayerCollide = mBall.getGlobalBounds();

然后使用以下方法测试碰撞:
if(mBallCollide.intersects(mPlayerCollide))

09-26 10:23