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))