との長い戦いの末、Graphics2D
ついにアプレットで小さな三角形を描画、回転、移動できるようになりました。今私がやりたいことは、三角形が指している角度を見つけて、その方向に動かすことです. これを行う方法またはアルゴリズムはありますか? 私はこれを試しました:
public double calcAngleMoveX(double angle)
{
return (double)(Math.cos(angle*Math.PI/180));
}
public double calcAngleMoveY(double angle)
{
return (double)(Math.sin(angle*Math.PI/180));
}
ship.incY(ship.calcAngleMoveY(ship.getFaceAngle()-90));
ship.incX(ship.calcAngleMoveX(ship.getFaceAngle()-90));
しかし、それは本当に奇妙なことをします。誰でも私のためにこれを解決できますか?
編集:これは私のコードですpaint()
:
g2d = (Graphics2D)g;
AffineTransform identity = new AffineTransform();
g2d.drawString(Double.toString(ship.getX()),100,100);
g2d.drawString(Double.toString(ship.getY()),100,120);
int width = getSize().width;
int height = getSize().height;
g2d.setColor(Color.BLACK);
g2d.fillRect(0,0,width,height);
g2d.translate(ship.getX(),ship.getY());
g2d.rotate(Math.toRadians(ship.getFaceAngle()));
g2d.setColor(Color.RED);
g2d.fill(shape);
そして、これは私の keyPressed メソッドです:
int ke = e.getKeyCode();
switch(ke)
{
case KeyEvent.VK_LEFT:
ship.setFaceAngle(ship.getFaceAngle()-5);
break;
case KeyEvent.VK_RIGHT:
ship.setFaceAngle(ship.getFaceAngle()+5);
break;
case KeyEvent.VK_UP:
ship.incX(ship.calcAngleMoveX(ship.getFaceAngle())*ship.velocity);
break;
case KeyEvent.VK_DOWN:
ship.incY(ship.calcAngleMoveY(ship.getFaceAngle())*ship.velocity);
break;
}
repaint();
計算方法は次のとおりです。
public double calcAngleMoveX(double angle)
{
return (double)(Math.sin(angle * Math.PI / 180.0));
}
public double calcAngleMoveY(double angle)
{
return (double)(-Math.cos(angle * Math.PI / 180.0));
}