旋转图形

时间:2013-05-13 16:31:16

标签: java awt java-2d graphics2d

我正在尝试制作子弹课程。当它被调用时,它将获得方向和初始位置。问题是方向不起作用,无论我设定的方向是什么,它都会上升。

请帮助。

提前致谢

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();
}

}

2 个答案:

答案 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始终保持不变(因此它不会向左或向右)