这将如何实现?这是我到目前为止的代码,可以根据鼠标所在的位置以及项目符号来旋转船。
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);
那么,我如何匹配子弹的速度使其与舰船所面对的方向相同?这样一来,如果我发射子弹,它就应该准确发射该船所朝的位置。
到目前为止,我已经尝试过创建从子弹到鼠标位置的距离矢量,并以该距离矢量移动子弹,但是当然,这会立即将子弹移动到仅一帧的鼠标位置。它需要像法线速度一样,仍然朝着鼠标位置移动。
最佳答案
因此,正如您正确描述的那样,您需要的是角度方向上的归一化增量。
您可以使用单位圆的属性并像
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;