在我制作的游戏中,我想用鼠标光标瞄准。这是我知道使子弹移向鼠标光标的代码:
找到鼠标位置 private PointerInfo mouse = MouseInfo.getPointerInfo(); private Point point = new Point(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度路径,同样的事情向左移动,向下移动在右边和右边。
答案 0 :(得分: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 += xVelocity
和yPosition += yVelocity
。