SFML - 无法在正确的方向上进行射弹射击

时间:2015-01-19 14:11:41

标签: c++ sfml

我使用这段代码让怪物追逐玩家,这很好用:

float angle = atan2(player.y - monster.y, player.x - monster.x); monster.move(cos(angle) * 0.5f,0); monster.move(0, sin(angle) * 0.5f);

我想我会改变它,以便子弹从玩家射向鼠标指针:

float angleShot2 = 0.0f;

...

case sf::Event::MouseButtonReleased:
        {
         projectile.setPosition(player.x,player.y);
         float angleShot = atan2(sf::Mouse::getPosition(window).y - projectile.y, 
                                 sf::Mouse::getPosition(window).x - projectile.x );
         angleShot2 = angleShot;  //so it goes in a straight line
        }

...

 projectile.move(cos(angleShot2) * 1.0f, 0);
 projectile.move(0, sin(angleShot2) * 1.0f);

玩家,怪物和子弹都是矩形

Window res是1280x900

设置播放器的位置后,我以跟随播放器的方式使用相机

sf::View view2(sf::FloatRect(0, 0, 1280, 900));
view.setSize(sf::Vector2f(1280, 900)); 
window.setView(view);

...

view.setCenter(player.getPosition());

子弹不会移动到鼠标释放的地方并且朝着奇怪的方向发展,也许你有一些关于我的代码的提示或者制作子弹的不同方法。我真的不能想出什么...... 我已经尝试将y的反转cos和x反转为sin,禁用相机

1 个答案:

答案 0 :(得分:2)

问题是sf :: Mouse :: getPosition返回窗口坐标中的curson位置,而所有实体都使用世界坐标。您可以使用sf :: RenderWindow对象的mapPixelToCoords成员函数来解决此问题:

...
case sf::Event::MouseButtonReleased:
{
     projectile.setPosition(player.x,player.y);
     sf::Vector2f mousePosition = window.mapPixelToCoords(sf::Mouse::getPosition(window));
     float angleShot = atan2(mousePosition.y - projectile.y, 
                             mousePosition.x - projectile.x );
     angleShot2 = angleShot;  
}

...