gpt4 book ai didi

Java 2D 旋转和全局坐标?

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:24 25 4
gpt4 key购买 nike

我正在制作一个简单的游戏,其中有一个物体(带有矩形桶的正方形)朝向鼠标。旋转部分工作得很好,但我希望当沿 y 轴按下按钮时对象会移动,但直接向上,而不是相对于其旋转。现在,当按下按钮时,对象会沿其面向的方向向前移动。无论对象处于哪个方向,如何将其直接沿 y 轴移动?代码如下:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class RotationTestMain extends JFrame implements MouseMotionListener, KeyListener{

public static final long serialVersionUID = 666L;

public static final int SIZE = 50;

double xComponent;
double yComponent;

Image dbImage;
Graphics dbg;

int x;
int y;
int centerX;
int centerY;

JPanel area;

public RotationTestMain(){
area = new JPanel();
area.addMouseMotionListener(this);
addKeyListener(this);

x = 487;
y = 359;

centerX = x + SIZE/2;
centerY = y + SIZE/2;

add(area);

setSize(1024,768);
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

@Override
public void paint(Graphics g){
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
Graphics2D g2d = (Graphics2D) dbg;
draw(g2d);
g.drawImage(dbImage, 0, 0, this);
}

public void draw(Graphics2D g2d){
g2d.setColor(Color.BLACK);
g2d.rotate(calculateRotation(), centerX, centerY);
g2d.fillRect(x, y, SIZE, SIZE);
g2d.fillRect(centerX-5,y-20,10,25);
repaint();
}

public double calculateRotation(){
double rot;
if(yComponent >= 0){
rot = 3 * Math.PI - Math.atan(xComponent/yComponent);
}else {
rot = 2 * Math.PI - Math.atan(xComponent/yComponent);
}
return rot;
}

public static void main(String[] args) {
new RotationTestMain();
}

@Override
public void mouseDragged(MouseEvent m) {
centerX = x + SIZE/2;
centerY = y + SIZE/2;
xComponent = m.getX() - centerX;
yComponent = m.getY() - centerY;
}

@Override
public void mouseMoved(MouseEvent m) {
centerX = x + SIZE/2;
centerY = y + SIZE/2;
xComponent = m.getX() - centerX;
yComponent = m.getY() - centerY;
}

@Override
public void keyPressed(KeyEvent arg0) {
//TODO FIX THE MOVING PROBLEM
this.y -= 3;
}

@Override
public void keyReleased(KeyEvent arg0) {
}

@Override
public void keyTyped(KeyEvent arg0) {
}
}

非常感谢您的帮助!!

最佳答案

我认为问题出在这一行 g2d.rotate(calculateRotation(), centerX, centerY);

你不是在旋转物体,而是在旋转整个g2d。因此,x、y 轴也会旋转,因为它们是 g2d 的一部分。

所以当你这样做时。y -= 3;你确实是沿着 y 轴移动,但是 y 轴已经旋转了。

我建议找到一种方法来旋转对象而不是整个 g2d。

关于Java 2D 旋转和全局坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com