碰撞后的SFML定位

时间:2013-12-14 14:07:54

标签: c++ collision-detection collision sfml

我制作了一个检测碰撞的简单程序,当“玩家”与“敌人”发生碰撞时,“玩家”会改变颜色。检测碰撞似乎相对容易,但碰撞后重新定位时我根本无法弄明白。

当我尝试时,我让它与双方合作但是当我添加所有四个时它根本不起作用。

以下是碰撞检测的(最小)代码(用鼠标移动播放器):

if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
    player.setPosition(sf::Vector2f(sf::Mouse::getPosition(window)));

if(enemy.getGlobalBounds().intersects(player.getGlobalBounds()))
    player.setFillColor(sf::Color(40,39,39));
else
    player.setFillColor(sf::Color(170,227,210));

有人可以帮我解决碰撞后如何重新定位'玩家'吗?

这也是我之前尝试过的:

if(player.getPosition().y + player.getOrigin().y >= enemy.getPosition().y -                         enemy.getOrigin().y){
    player.setPosition(player.getPosition().x, enemy.getPosition().y -  player.getSize().y);
}
else if(player.getPosition().y - player.getOrigin().y <= enemy.getPosition().y + enemy.getOrigin().y){
    player.setPosition(player.getPosition().x, enemy.getPosition().y + player.getSize().y);
}
else if(player.getPosition().x - player.getOrigin().x <= enemy.getPosition().x + enemy.getOrigin().x){
    player.setPosition(enemy.getPosition().x + player.getSize().x, player.getPosition().y);
}
else if(player.getPosition().x + player.getOrigin().x >= enemy.getPosition().x - enemy.getOrigin().x){
    player.setPosition(enemy.getPosition().x - player.getSize().x, player.getPosition().y);
}

0 个答案:

没有答案