0

在游戏即时制作中,我想使用鼠标光标瞄准。这是我知道的使子弹向鼠标光标移动的代码:

定位鼠标位置 private PointerInfo mouse = MouseInfo.getPointerInfo(); 私人点点=新点(mouse.getLocation());使子弹有点向鼠标光标移动

if(point.getX() > player.getX()){
        setX(getX() + 1);
}
if(point.getX() < player.getX()){
        setX(getX() - 1);
}
if(point.getY() > player.getY()){
        setY(getY() + 1);
}
if(point.getY() < player.getY()){
        setY(getY() - 1);
}

问题是,如果鼠标光标位于该区域的某个位置,子弹不会精确地移动到鼠标光标,而是沿着 45 度的路径向左移动,同样的事情也适用于从左到右直到右边。

4

1 回答 1

2

为了使子弹直接朝着光标移动,而不是总是以 45 度的路径移动,double请用于 X 和 Y 的内部表示。此外,由于您希望子弹朝某个方向前进,因此您需要计算首次创建子弹时的 X 速度和 Y 速度。

例如:

double deltaX = player.getX() - point.getX();
double deltaY = player.getY() - point.getY();
double magnitude = Math.sqrt(deltaX*deltaX + deltaY*deltaY);

// It's possible for magnitude to be zero (cursor is over the person)
// Decide what you want the default direction to be to handle that case
double xVelocity = 1;
double yVelocity = 0;
if (magnitude != 0) {
    xVelocity = deltaX / magnitude;
    yVelocity = deltaY / magnitude;
}

使用第一次创建子弹时计算的速度,在每个滴答声中,您只需要使用xPosition += xVelocityand yPosition += yVelocity

于 2013-04-22T17:45:44.693 回答