我正在尝试制作子弹课程。当它被调用时,它将获得方向和初始位置。问题是方向不起作用,无论我设定的方向是什么,它都会上升。
请帮助。
提前致谢
public class Bullet extends JComponent implements ActionListener{
private int bx,by;
private double theta;
private double BvelX, BvelY;
private Timer timer = new Timer(8,this);
public Bullet(int bx, int by, double theta)
{
this.bx = bx;
this.by = by;
this.theta = theta;
BvelX = 0;
BvelY = -1;
timer.start();
revalidate();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D graphicsS = (Graphics2D) g;
graphicsS.rotate(theta, bx, by);
graphicsS.setColor(Color.RED);
graphicsS.fillOval(bx, by, 8, 8);
}
public void actionPerformed(ActionEvent e)
{
bx += BvelX;
by += BvelY;
/*by += 5*(Math.sin(theta));
bx += 5*(Math.cos(theta));*/
revalidate();
repaint();
}
}
答案 0 :(得分:1)
你的方向就在这里:
BvelX = 0;
BvelY = -1;
这表示要坚持下去
你可能想要一些像被注释掉的东西
BvelY = 5*(Math.sin(theta));
BvelX = 5*(Math.cos(theta));
由于您的头寸是整数,因此您将无法完全按照指向的方向行进。也许你应该存储双打,但绘制整数。然后你可以让子弹靠近theta。
答案 1 :(得分:0)
好吧,因为:
BvelX = 0;
BvelY = -1;
当你更新时:
bx += BvelX;
by += BvelY;
因此y
递减(因此它会上升)但x
始终保持不变(因此它不会向左或向右)