【发布时间】:2015-06-11 07:03:47
【问题描述】:
我刚刚开始使用 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();
}
【问题讨论】:
-
我无法理解这一点。 1)
mPlayer是否代表玩家桨?如果是,为什么要在交叉点上加分?这是Pong的一些奇怪的方言吗? :D 2) 在交叉路口,你应该“纠正”球在桨旁边。球不应该通过桨,对吧?你也应该改变球的运动矢量。 在桨-球碰撞时改变它 3) 你设置了两次球的颜色,首先在collision(),然后在update()4) 乒乓球和重力?这是如何运作的? 5) 您不必每帧都设置帧限制()。在您的 c-tor 中执行此操作。 -
在Tilemap Collision SFML C++ 上查看我的回答,这可能会帮助您看到碰撞的到来,而不是检查球在移动后是否发生碰撞。
标签: c++ collision-detection sfml