在精灵正面临的方向上做子弹射击
问题描述:
这将如何实现?这里是我到目前为止的代码只是旋转基于鼠标的位置,以及子弹船:在精灵正面临的方向上做子弹射击
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帧。它需要像一个仍然朝向鼠标位置的正常速度。
答
因此,正如你正确地描述了你需要的是角度方向上的归一化增量。
无论您使用的统一圆的性能和计算它像
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;
好像基本三角给我。要么'velocity_x = cos(角度)*速度; velocity_y = sin(angle)* speed;'或者规格化向量'[mousex-xPos,mousey-yPos]'并且将其分量与速度 – PeterT 2014-11-21 12:30:58