2015-04-06 51 views
2

我刚刚加入了SFML 2.1,我想做一个Pong游戏。但是我遇到了一个问题,我无法做出碰撞检测。当它检测到碰撞时,球即使移动到任何位置,也会移动到另一个位置。下面有你需要的代码(对不起,我的英文不好它不是我的母语):C++ SFML 2.1碰撞

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

我莫名其妙地无法把握这一点。 ** 1)**'mPlayer'是否代表球员桨?如果是,为什么你在交叉点上添加分数?这是不是Pong的一些奇怪的方言? :D ** 2)**在十字路口,你应该“纠正”球在桨的旁边。球不应该通过桨,对不对?你也应该改变运动的球向量。 *改变它在桨碰撞* ** 3)**你设置球颜色两次,首先在碰撞()',然后在'更新()'** 4)**乒乓球和重力?这是如何运作的? ** 5)**你不必setFrameLimit()每一帧。在你的C-tor中做。 – sjaustirni

+0

在[Tilemap Collision SFML C++](http://stackoverflow.com/a/21594634/1218980)上查看我的回答,这可能会帮助您看到碰撞来临,而不是在移动碰撞后检查碰撞。 –

回答

-2

你需要将每一种形状的floatrect:

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

,然后他们变换设置浮动RECT每次对他们说:

mBallCollide = mBall.getGlobalBounds(); 
mPlayerCollide = mBall.getGlobalBounds(); 

,然后以测试碰撞使用:

if(mBallCollide.intersects(mPlayerCollide))