Java - 图片直到循环结束才显示?

时间:2011-09-28 17:13:18

标签: java image 2d sprite

在Java中,我已成功在屏幕上显示图像。现在我想通过for循环运行它来移动它。 for循环运行10次,每次睡眠1秒。我没有按预期每秒移动图像,而是等待10秒钟,然后显示10张图像。

这是我的代码:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class ImageDraw extends JComponent {
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Image img1 = Toolkit.getDefaultToolkit().getImage("player.png");

        int x = 0;
        int y = 0;

        for(int i = 0;i<10;i++){
            try {
                Thread.sleep(1000);
                x+=10;
                y+=10;
                g2.drawImage(img1, x, y, this);
                repaint();
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.exit(0);
            }   
        }   //end for

    }   //end paint

}   //end class

如何使图像看起来好像每当它在循环中运行时都会移动?

2 个答案:

答案 0 :(得分:2)

除了其他建议:

  1. 永远不要在绘画方法中阅读图像。在构造类时读取图像或使用setImage(...)方法传入图像。

  2. 自定义绘制是通过覆盖paintComponent()方法而不是paint()方法完成的。

答案 1 :(得分:1)

为此使用Timer,并删除Thread.sleep()。您正在UI线程上运行此代码,当您调用Thread.sleep()时,您将UI线程置于休眠状态,这意味着在整个循环完成之前不会更新。