我正在尝试使用Timer
类在Java中顺利地制作简单的动画,即将target
从其当前位置水平移动到最远的帧末尾。] >>
我在Timer
类的actionPerformed()
方法中使用了图形组件的当前位置,并已将组件的x
位置增加了一定数量,但是当我尝试运行它时,该组件会立即跳至下一个位置并等待计时器完成并重新绘制到新位置。 ((如果我没有正确说明问题,我深表歉意。)
我已将代码作为一个整体包含在内,以提供整个上下文:
public class FireAtBill extends JPanel { private static final long serialVersionUID = 4682094035006759518L; private int hits, misses; private Point targetPos; private Timer t; private BufferedImage crosshair, target; public FireAtBill() { Random random = new Random(); targetPos = new Point(random.nextInt(500),random.nextInt(500) ); t = new Timer(500, new TimerListener()); t.start(); setForeground(Color.WHITE); setBackground(Color.BLACK); try { crosshair = ImageIO.read(new File(System.getProperty("user.dir")+ "/crosshair.jpg")); target = ImageIO.read(new File(System.getProperty("user.dir")+ "/target.png")); } catch (IOException e) { e.printStackTrace(); } } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.drawString("hits: " + hits + " misses: " + misses, 0, 10); g2.drawImage(crosshair, 125, 50, this); g2.drawImage(target, targetPos.x, targetPos.y, this); } public static void main(String[] args) { JFrame frame = new JFrame("Fire At Bill"); frame.setSize(500,500 ); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); FireAtBill fireAtBill = new FireAtBill(); frame.getContentPane().add(fireAtBill); frame.setVisible(true); } private class TimerListener implements ActionListener{ double x = targetPos.getX(); public void actionPerformed(ActionEvent event) { if (x <= 500||targetPos.getX() >= 0) { if (x<250) { targetPos.setLocation(targetPos.getX()+15, targetPos.getY()); } else { targetPos.setLocation(targetPos.getX()-15, targetPos.getY()); } } repaint(); } } }
我希望
target
在屏幕上水平平滑移动,但是target
正在从一个位置跳到另一个位置。我尝试使用较小的值增加x
的target
位置,虽然这可以平滑移动,但这样做的代价是以target
的速度为代价,我希望将其实现为可以通过更改其值进行更改。预先感谢。
我正在尝试使用Timer类在Java中顺利完成一个简单的动画,即将目标从其当前位置水平移动到最远的帧末尾。我用过图形...
[好,我发现通过减小初始化Timer
对象时的延迟值,可以通过将t = new Timer(500, new TimerListener());
更改为500
之类的东西来加快此处50
的重新绘制过程。 减小此值将加快动画的速度。