我正在尝试使用 java 的 Graphics2D 在屏幕上绘制图像。这是我正在使用的代码。我想看到图像在屏幕上稳定移动。目前我可以看到图像,但除非我调整窗口大小,否则它不会移动,在这种情况下它会移动。我已经勾勒出了下面的课程。
public class Tester extends JFrame {
private static final long serialVersionUID = -3179467003801103750L;
private Component myComponent;
public static final int ONE_SECOND = 1000;
public static final int FRAMES_PER_SECOND = 20;
private Timer myTimer;
public Tester (Component component, String title) {
super(title);
myComponent = component;
}
public void start () {
myTimer = new Timer(ONE_SECOND / FRAMES_PER_SECOND, new ActionListener() {
@Override
public void actionPerformed (ActionEvent e) {
repaint();
}
});
myTimer.start();
}
@Override
public void paint (Graphics pen) {
if (myComponent != null) {
myComponent.paint(pen);
}
}
}
传递给 Tester 的 Component 对象是以下类:
public class LevelBoard extends Canvas implements ISavable {
private static final long serialVersionUID = -3528519211577278934L;
@Override
public void paint (Graphics pen) {
for (Sprite s : mySprites) {
s.paint((Graphics2D) pen);
}
}
protected void add (Sprite sprite) {
mySprites.add(sprite);
}
我确保这个类只有一个我添加的精灵。sprite类大致如下:
public class Sprite {
private Image myImage;
private int myX, myY;
public Sprite () {
URL path = getClass().getResource("/images/Bowser.png");
ImageIcon img = new ImageIcon(path);
myImage = img.getImage();
}
public void update () {
myX += 5;
myY += 5;
}
public void paint (Graphics2D pen) {
update();
pen.drawImage(myImage, myX, myY,null);
}
但是,我在屏幕上只看到了 Bowser 的静止图像。除非调整窗口大小,否则他不会移动。我知道 Sprite 类中的 paint(Graphics2D pen) 方法是以特定的时间间隔被调用的(因为 Tester 类中的 Timer )。但是,即使 x 和 y 位置每次都增加 5。精灵不动。为什么不?我如何解决它?我现在只是在尝试测试我的程序的其他一些功能,所以我真的只需要启动并运行它。我真的不在乎如何。