如何使射弹朝某个方向发射?
我正在为我的Java课程制作一个小游戏,你可以在其中玩一个带有脸部的小红色方块,并且基本上必须从框架边框拍摄迎面而来的形状,以便尽可能长时间地存活。
你的角色随着W,A,S和D移动,同时你用鼠标移动目标。我已经制作了一个“slimeball”图形,从他的嘴里射击到鼠标点击目标的任何地方。但是,我不能为我的生活弄清楚如何实现这一点。我在这里找不到任何其他问题可以回答我的需要。
这就是我现在所拥有的计时器,以便让粘液球移动:
ActionListener timerAction = new ActionListener(){
public void actionPerformed(ActionEvent evt) {
if(evt.getSource() == moveSlimeBall){
slimeX += slimeXSpeed;
slimeY += slimeYSpeed;
repaint();
}
}
};
Timer moveSlimeBall = new Timer(10 , timerAction);
我知道这是不完整的,除了将球从左上角向右移动之外,它什么也没做。我也有这个来计算球员嘴巴(射击的位置)和目标位置之间的角度:
firingAngle = (int)(Math.atan((double)(xMouth - mouseX) / (double)(yMouth - mouseY)) / Math.PI * (double)180);
但这给了我奇怪的价值,我无法弄清楚如何使它成为一个适当的360度测量。此外,我不知道在哪里开始使用它与计时器,使其向正确的方向移动。显然我是新手,我在过去的几个月里一直在学习java的基础知识,但刚刚开始学习图形。如果有人可以提供帮助,将不胜感激!如果它有帮助,我有其他变量:
private int mouseX;
private int mouseY;
int slimeX;
int slimeY;
boolean isFiring = false;
int slimeXSpeed = 4;
int slimeYSpeed = 4;
这是mousePressed方法:
public void mousePressed(MouseEvent e) {
if(mouseX >= playerX - 12.5 && mouseX <= (playerX + 87.5) && mouseY >= playerY - 12.5 && mouseY <= playerY + 87.5){
targetIsValid = false;
isFiring = false;
Sound.invalidTargetSound.play();
repaint();
}else{
Sound.shootSlimeSound.play();
targetIsValid = true;
isFiring = true;
repaint();
}
}
编辑:修正角度测量,现在测量正确的值
firingAngle = Math.atan2(mouseX - mouthX , mouseY - mouthY);
firingAngle -= Math.PI/2.0;
firingAngle = Math.toDegrees(firingAngle);
if(firingAngle < 0){
firingAngle += 360;
}
编辑2:修正距离测量,正确找到原始x和目标x,原始y和目标y之差的斜边。我现在有角度,距离和计时器完美运行,现在有人可以帮助将它们全部放在一起,使它实际上使用这些信息移动吗?
public void calcHypot(){
diffX = playerX - mouseX;
diffY = playerY - mouseY;
firingDistance = Math.hypot(diffX, diffY);
}