我正在开发一个简单的Java 2D游戏,涉及两个射击导弹并在屏幕上移动的坦克。 对于这个问题,让我们假设只有一个坦克。
控制:
按左或右也旋转精灵。
我试图对游戏进行编码,以便导弹从“tank barrerl”射出(点标记为绿色)。但是,我写的代码没有达到这个目的。
相反,当按下ENTER时,导弹出现在精灵或其周围的一个点上,这似乎是随机的。
(橙色点是坦克的起源:tank.getX(),tank.getY())。
如果没有坦克旋转的事实,那么编码就不会有问题。每次用户旋转水箱时,绿点的位置都会发生变化。
我的代码出了什么问题?这个代码应该使导弹从“桶”的任何地方“射击”。正如我所说,不起作用。
这是用户按ENTER键时运行的内容。
enterAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
double missileXposition, missileYposition;
double tankMiddleX,tankMiddleY;
double angle, radius;
tankMiddleX = tank1.getX() + (tank1.getWidth()/2);
tankMiddleY = tank1.getY() + (tank1.getHeight()/2);
angle = tank1.getAngle();
radius = tank1.getWidth()/2;
missileXposition = tankMiddleX + ( Math.cos(angle) * radius );
missileYposition = tankMiddleY + ( Math.sin(angle) * radius );
missiles1.add( new Missile( missileXposition, missileYposition , "red" , tank1.getAngle() , tank1) );
}
};
Missile
类:
public class Missile extends Entity {
public Missile(double x, double y, String type, double angle, Tank tank){
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this.type = type;
this.angle = angle;
if(type.equals("red")) image = new ImageIcon(this.getClass().getResource("sprites/redrocket1.png")).getImage();
if(type.equals("blue")) image = new ImageIcon(this.getClass().getResource("sprites/bluerocket1.png")).getImage();
width = image.getWidth(null);
height = image.getHeight(null);
if(type.equals("blue")) dx = (-1) * ( 6 * Math.cos(Math.toRadians(tank.getAngle())) );
if(type.equals("red")) dx = 6 * Math.cos(Math.toRadians(tank.getAngle()));
if(type.equals("blue")) dy = (-1) * ( 6 * Math.sin(Math.toRadians(tank.getAngle()) ) );
if(type.equals("red")) dy = 6 * Math.sin(Math.toRadians(tank.getAngle()));
}
}
非常感谢
答案 0 :(得分:1)
确定精灵的原点(橙色)和导弹起点(绿色)(d
)之间的距离以及精灵上缘和橙绿色a
之间的角度。
现在你将导弹的起点设置为
tank1.getX()+Math.cos(d*Math.toRadians(a+tank1.getAngle()));
tank1.getY()+Math.sin(d*Math.toRadians(a+tank1.getAngle()));
我不知道它是否100%正确,但我认为这是正确的方向。