Java 如何使矩形旋转到光标的正面?
我希望为我的年终计划做一个非常基础的游戏(高中时参加计算机科学),但是我找不到任何关于如何使我画的矩形面对光标的答案。这个网站在过去非常有用,但这是我的第一个问题,我希望你们能帮助我Java 如何使矩形旋转到光标的正面?,java,applet,rotation,awt,transform,Java,Applet,Rotation,Awt,Transform,我希望为我的年终计划做一个非常基础的游戏(高中时参加计算机科学),但是我找不到任何关于如何使我画的矩形面对光标的答案。这个网站在过去非常有用,但这是我的第一个问题,我希望你们能帮助我 dir = Math.toRadians(Math.atan2(yy1,xx1)/2*Math.PI); 我想问题出在这段代码中或者 g2d.rotate(dir,xx,yy); 这个。我应该使用仿射变换吗?如果是,如何使用 提前谢谢 import java.awt.*; import java.applet.
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) {
}
}我认为您的程序中少了一些东西 不重置旋转。旋转完成后,绘制要旋转的对象,然后使用仿射变换重置旋转
AffineTransform reset = new AffineTransform();
reset.rotate(0,0,0);
然后,可以将变换仅应用于旋转单个对象
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));
我这么说主要是因为我不明白你的数学想要完成什么
希望这有帮助。1)为什么要编写小程序?如果是老师指定的,请参考。2) 为什么是AWT而不是Swing?关于放弃使用AWT组件的许多好理由,请参见上的回答。如果需要支持较旧的基于AWT的API,请参阅。问题是什么?它不起作用吗?它工作不正确吗?谢谢,我要去学swing了,我想,我们的老师只是在分发课程作业,不,它不工作。当你移动鼠标时,矩形只是旋转。