移動圖像這是Bob:的Java:對鼠標的位置
我已經知道如何讓他旋轉朝着老鼠地位得益於這樣一個問題:https://stackoverflow.com/posts/26607930/edit
我得到的一切工作,但仍然無法設法移動他按下一個鍵時,鼠標位置。
下面是一個例子:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ImageFollowingMouseTest
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
private static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new ImageFollowingMousePanel());
f.setSize(400,400);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
class ImageFollowingMousePanel extends JPanel implements MouseMotionListener
{
private final BufferedImage image;
private Point imagePosition = new Point(150,150);
private double imageAngleRad = 0;
public ImageFollowingMousePanel()
{
BufferedImage i = null;
try
{
i = ImageIO.read(new File("6Wu0b.png"));
}
catch (IOException e)
{
e.printStackTrace();
}
image = i;
addMouseMotionListener(this);
}
protected void paintComponent(Graphics gr)
{
super.paintComponent(gr);
Graphics2D g = (Graphics2D)gr;
g.setRenderingHint(
RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
int cx = image.getWidth()/2;
int cy = image.getHeight()/2;
AffineTransform oldAT = g.getTransform();
g.translate(cx+imagePosition.x, cy+imagePosition.y);
g.rotate(imageAngleRad);
g.translate(-cx, -cy);
g.drawImage(image, 0, 0, null);
g.setTransform(oldAT);
}
@Override
public void mouseDragged(MouseEvent e)
{
}
@Override
public void mouseMoved(MouseEvent e)
{
double dx = e.getX() - imagePosition.getX();
double dy = e.getY() - imagePosition.getY();
imageAngleRad = Math.atan2(dy, dx);
repaint();
}
}
提前感謝!
而運動是如何想工作?如果用戶按下「W」,應該向上移動還是向着鼠標移動一長線? – MadProgrammer 2014-12-30 20:56:46