0

年末のプロジェクト(高校でコンピューターサイエンスを学ぶ)のために非常に基本的なゲームを作りたいと思っていますが、私が描いている長方形をカーソルに向ける方法についての答えが見つかりません。このサイトは過去に非常に役に立ちましたが、これは私の最初の質問であり、皆さんが助けてくれることを願っています.

dir = Math.toRadians(Math.atan2(yy1,xx1)/2*Math.PI);

私は、問題であるこのコード片か、

g2d.rotate(dir,xx,yy);

これ。アフィン変換を使用する必要がありますか?

前もって感謝します。

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.image.*;

public class W extends Applet implements KeyListener, MouseMotionListener {
int xx=100,yy=100,xx1,yy1,wid,hig;
String key;
Rectangle rect1;
double dir, trueing=0;

Image offImage;
Graphics offGraphics;

public void init() {
    setSize(800,600);
    addKeyListener(this);
    addMouseMotionListener(this);
}

public void update(Graphics g) {
     if (offGraphics == null) {
        offImage = createImage(800,600);
        offGraphics = offImage.getGraphics();
    }

    offGraphics.setColor(Color.WHITE);
    offGraphics.fillRect(0,0,800,600);

    Graphics2D g2d = (Graphics2D)offGraphics;
    offGraphics.setColor(Color.BLACK);
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

    g2d.rotate(dir,xx,yy);

    g2d.draw(new Rectangle(xx, yy, 10, 10));

    offGraphics.setColor(getForeground());
    g.drawImage(offImage, 0, 0, this);

}

public void paint(Graphics g) {
    update(g);
}

public void Game(){

}

public void keyPressed(KeyEvent ke){
    if (ke.getKeyCode() == KeyEvent.VK_UP){
        yy--;
        key = "u";
        System.out.println(key+xx+"-"+yy);
        repaint();
    }
    if (ke.getKeyCode() == KeyEvent.VK_DOWN){
        yy++;
        key = "d";
        System.out.println(key+xx+"-"+yy);
        repaint();
    }
    if (ke.getKeyCode() == KeyEvent.VK_LEFT){
        xx--;
        key = "l";
        System.out.println(key+xx+"-"+yy);
        repaint();
    }
    if (ke.getKeyCode() == KeyEvent.VK_RIGHT){
        xx++;
        key = "r";
        System.out.println(key+xx+"-"+yy);repaint();
        repaint();
    }
}

public void keyReleased(KeyEvent e) {
}

public void keyTyped(KeyEvent e) {
}

public void mouseMoved(MouseEvent e) {
    xx1=e.getX();
    yy1=e.getY();
    showStatus( "Mouse at (" + xx1 + "," + yy1 + ")" );
    dir = Math.toRadians(Math.atan2(yy1,xx1)/2*Math.PI);

    repaint();

}

public void mouseDragged(MouseEvent e) {
}

}

4

1 に答える 1

0

あなたのプログラムに欠けていると私が思うものはほとんどありません。

回転をリセットしません。回転を行った後、回転させたいオブジェクトを描画し、AffineTransform を使用して回転をリセットします

AffineTransform reset = new AffineTransform();
reset.rotate(0,0,0);

次に、変換を適用して、1 つのオブジェクトのみを回転させることができます。

g2d.rotate(dir,xx,yy);
g2d.draw(new Rectangle(xx, yy, 10, 10));
g2d.setTransform(reset);

オブジェクトが回転する角度を計算するときは、次を使用することをお勧めします。

xx1 = e.getX();
yy1 = e.getY();
dir = Math.toRadians(Math.atan2(yy - yy1, xx - xx1));

私がこれを言う主な理由は、あなたの数学が達成しようとしていたことを理解していないからです.

お役に立てれば。

于 2013-05-27T09:23:47.483 に答える