问题:
我有这个“射击”课程。在代码中,目标变量是 mouseX 和 mouseY。所以当我点击鼠标按钮时,我的玩家类将创建一个新的镜头对象。但拍摄不准确。如何计算正确的 dx 和 dy?
如果我将 dx 和 dy 添加到“子弹的”x 和 y,子弹将移动到鼠标的方向。这就是我想要的。创建对象时,鼠标位置存储在 targetX 和 targetY 中。这就是椭圆想要达到的点。
链接:
代码(来自 Shot.java):
public class Shot extends Entity {
private float targetX, targetY;
public Shot(World world, float x, float y, int width, int height, Color color, float targetX, float targetY) {
super(world, x, y, width, height, color);
this.targetX = targetX;
this.targetY = targetY;
}
@Override
public void render(GameContainer gc, Graphics g, Camera camera) {
g.setColor(color);
g.fillOval(x - camera.getX(), y - camera.getY(), width, height);
}
@Override
public void update(GameContainer gc, int delta) {
float dx = targetX - x;
float dy = targetY - y;
x += dx * delta * .001f;
y += dy * delta * .001f;
}
}
我试过这个,但还是不行:
@Override
public void update(GameContainer gc, int delta) {
float length = (float) Math.sqrt((targetX - x) * (targetX - x) + (targetY - y) * (targetY - y));
double dx = (targetX - x) / length * delta;
double dy = (targetY - y) / length * delta;
x += dx;
y += dy;
}
我做到了!这是我的解决方案:
问题是,目标是窗口的鼠标位置,而不是世界的鼠标位置。
这就是我计算世界鼠标位置的方式:
float mouseWorldX = x + (mouseX - screen_width / 2); // x = player's x position
float mouseWorldY = y + (mouseY - screen_height / 2); // y = player's y position