创建一个“子弹”类(Java / swing)

时间:2013-07-02 13:17:46

标签: java swing class projectile

我正在尝试创建一个塔防风格的游戏,其目标是阻止攻击部队到达目标。这是通过建造塔来完成的,这些塔以不同类型的攻击攻击敌人的波浪。由于我是编程新手,我希望能够帮助创建我的子弹的SetBulletLocation方法。

我一直在尝试复制:this example但我不能让我的子弹顺利移动到目标位置

public class Bullets extends JComponent{
//x,y = the towers coordinates, where the shoot initiliazes from.
//tx, ty = Target's x and y coordinates.
private int x,y,tx,ty;
private Point objectP = new Point();
    public Bullets(int x, int y, int tx, int ty)
        this.x = x;
        this.y = y;
        this.tx = tx;
        this.ty = ty;
        setBounds(x,y,50,50);
        //Create actionlistener to updateposition of the bullet (setLocation of component)
        ActionListener animate = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {

            setBulletLocation();


        }
        };
        Timer t = new Timer(500,animate);
        t.start();

    }
public void setBulletLocation() {
    objectP = this.getLocation();
    double xDirection =  5* Math.cos(-(Math.atan2(tx - x, tx - y))+ 90);
    double yDirection =  5* Math.sin(-(Math.atan2(tx - x, tx - y))+ 90);
    System.out.println(xDirection + " , " + yDirection);
    x = (objectP.x + (int) xDirection);
    y = (objectP.y + (int) yDirection);
    setLocation(x, y);

    repaint();
 }
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.fillOval(0, 0, 50, 50);
}

3 个答案:

答案 0 :(得分:2)

所有Java数学触发函数都采用弧度参数,而不是度数。尝试使用Math.PI / 2而不是90:

  

double xDirection = 5 * Math.cos( - (Math.atan2(tx - x,tx - y))+ 90);

     

double yDirection = 5 * Math.sin( - (Math.atan2(tx - x,tx - y))+ 90);

答案 1 :(得分:1)

我注意到计算位移

时出错

片段:

Math.atan2(tx - x, tx - y))

不是吗?:

Math.atan2(tx - x, ty - y))

答案 2 :(得分:0)

您的paintComponent()似乎每次都在相同的位置和大小绘制子弹,无论您的计算如何。

将新的x和新y值存储到成员变量中,并使用paintComponent中的那些。

此外 - Java的trig函数使用弧度,而不是度数,因此使用pi / 2将引用更新为90度。