Java 旋转图像
好了,伙计们,我正在尝试制作一个小行星类型的游戏,我需要能够旋转一个图像,以便船的前部跟随我的鼠标。我已经找了几个小时了,发现了一些东西,但没有一件能满足我的需要 如果有人知道怎么做,请分享 提前谢谢 这是我现在的代码Java 旋转图像,java,image,swing,java-2d,image-rotation,Java,Image,Swing,Java 2d,Image Rotation,好了,伙计们,我正在尝试制作一个小行星类型的游戏,我需要能够旋转一个图像,以便船的前部跟随我的鼠标。我已经找了几个小时了,发现了一些东西,但没有一件能满足我的需要 如果有人知道怎么做,请分享 提前谢谢 这是我现在的代码 package Asteroids; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import java.awt.
package Asteroids;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class Asteroids extends JFrame implements Runnable, MouseListener,
MouseMotionListener, KeyListener {
private Image dbImage;
private Graphics dbg;
int x, y, mx, my;
int a, b, c, degree;
double scale = 1.0;
ImageIcon shipIcon = new ImageIcon(this.getClass().getClassLoader()
.getResource("AstroidsShip.png"));
Image ship = shipIcon.getImage();
public static void main(String[] args) {
Asteroids frame = new Asteroids();
Thread thread = new Thread(frame);
thread.start();
}
public Asteroids() {
addMouseListener(this);
addMouseMotionListener(this);
addKeyListener(this);
setTitle("Astroids");
setSize(500, 500);
setBackground(Color.WHITE);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
x = getWidth() / 2 - 10;
y = getHeight() - getHeight() / 2;
}
public void run() {
while (true) {
try {
} catch (Exception e) {
}
}
}
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g) {
g.drawString("POS: " + mx + ", " + my, 10, 40);
System.out.println(getAngle());
g.drawImage(ship, x, y, this);
g.drawLine(x + 12, y + 10, mx, my);
repaint();
}
public int getAngle() {
a = mx - (x + 12);
b = (y - 10) - my;
return degree = (int) Math.toDegrees(Math.atan2(b, a));
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
你可以用。它允许旋转图像,并对图像执行许多其他很酷的操作。它还获得了硬件加速支持(通过DirectX或OpenGL)
Java2D内置于JRE中。在paintComponent方法中,您可以使代码看起来像:
public void paintComponent(Graphics g) {
g.drawString("POS: " + mx + ", " + my, 10, 40);
System.out.println(getAngle());
Graphics2D g2d = new (Graphics2D)g;
g2d.translate(X, Y);
g2d.rotate(DEGREES);
g2d.drawImage(ship, 0, 0, WIDTH, HEIGHT, this);
g.drawLine(x + 12, y + 10, mx, my);
repaint();
}
对于更复杂的使用,可以使用所有船舶图纸计算创建一个方法:
public void paintComponent(Graphics g) {
g.drawString("POS: " + mx + ", " + my, 10, 40);
System.out.println(getAngle());
drawShip(g);
g.drawLine(x + 12, y + 10, mx, my);
repaint();
}
public void drawShip(Graphics g){
Graphics2D g2d = (Graphics2D)g;
g2d.translate(X, Y);
g2d.rotate(DEGREES);
g2d.drawImage(ship, 0, 0, WIDTH, HEIGHT, this);
}
一种方法是使用其中一个接受X,Y坐标锚定的旋转实例。这家伙可能会帮你:我刚刚看了那个视频,我已经知道如何移动这样的对象了。我需要做的是旋转我的图像,飞船,使它的正面总是看着鼠标。我会的,但问题是我不知道如何使用2D。我刚开始学习Java,我编写了一个名为XliteRSPS的代码,这是一个RuneScape私有服务器,所以我不会真正处理图形,因为它们都在游戏客户端中。下面是一些示例代码:-它将与游戏中已经使用的图形类一起工作。好吧,我有点了解如何使用它。我现在遇到的问题是,当我逆时针旋转它时,它是顺时针旋转的。你知道有没有办法让它以另一种方式旋转,或者一个单位圆可以吗?@trashgood嘿。。小行星如何出现在场地中央?不公平!虽然很有趣……)能量护盾作为练习离开。:-)