我制作了一个检测碰撞的简单程序,当“玩家”与“敌人”发生碰撞时,“玩家”会改变颜色。检测碰撞似乎相对容易,但碰撞后重新定位时我根本无法弄明白。
当我尝试时,我让它与双方合作但是当我添加所有四个时它根本不起作用。
以下是碰撞检测的(最小)代码(用鼠标移动播放器):
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);
}