2015-04-06 89 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))