向子弹面向的方向射击子弹

时间:2014-11-21 12:12:11

标签: c++ sfml

这究竟会如何实现?这是我到目前为止的代码,根据鼠标的位置以及子弹旋转船只:

xPos = ship.getPosition().x, yPos = ship.getPosition().y, mousex = sf::Mouse::getPosition(window).x, mousey = sf::Mouse::getPosition(window).y;
if (mousex > 800) mousex = 800; if (mousey > 600) mousey = 600; if (mousex < 0) mousex = 0; if (mousey < 0) mousey = 0;
double angle = atan2(mousey - yPos, mousex - xPos) * (180/3.14159);
ship.setRotation(90+angle);
bullet.setRotation(-90+angle);

那么,我如何将子弹的速度与船舶所面向的方向相匹配?因此,如果我发射一枚子弹,它应该准确地射向船舶所朝向的位置。

我到目前为止所尝试的是创建从子弹到鼠标位置的距离矢量,并通过该距离矢量移动子弹,但当然这会立即将子弹移动到鼠标的位置仅1帧。它需要像正常速度一样仍然朝向鼠标位置。

1 个答案:

答案 0 :(得分:1)

因此,正确描述您需要的是角度方向的归一化增量。

要么使用统一圆的属性并将其计算为

velocity_x = cos(angle)*speed;
velocity_y = sin(angle)*speed;

或者您使用您开始的方法并执行

diff_x = mousex - xPos;
diff_y = mousey - yPos;
magnitude = sqrt(diff_x*diff_x + diff_y*diff_y);
velocity_x = diff_x/magnitude * speed; 
velocity_y = diff_y/magnitude * speed;