0

私は弾丸クラスを作ろうとしています。呼び出されると、方向と初期位置が取得されます。問題は、方向が機能していないことです。方向として設定したものに関係なく、上昇するだけです。

助けてください。

前もって感謝します

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

}

4

2 に答える 2

1

あなたの方向はここにあります:

BvelX = 0;
BvelY = -1;

これは直進すると言う

おそらく、コメントアウトされているようなものが必要です

BvelY = 5*(Math.sin(theta));
BvelX = 5*(Math.cos(theta));

位置は整数であるため、指している方向に正確に進むことはできません。double を格納する必要があるかもしれませんが、integer を描画します。次に、弾丸をシータに近づけることができます。

于 2013-05-13T16:40:11.167 に答える
0

それは次の理由で上昇します。

BvelX = 0;
BvelY = -1;

そして更新すると:

bx += BvelX;
by += BvelY;

したがってy、減分されます (上がるため) が、x常に同じままです (左右に移動しないため)。

于 2013-05-13T16:38:39.403 に答える