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);
}
このクラスには、追加したスプライトが 1 つだけあることを確認しました。スプライトのクラスは、おおよそ次のとおりです。
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);
}
しかし、画面にはクッパの静止画像しか見えません。ウィンドウのサイズを変更しない限り、彼は動きません。Sprite クラスの paint(Graphics2D pen) メソッドが特定の間隔で呼び出されていることはわかっています (Tester クラスの Timer のため)。ただし、x と y の位置は毎回 5 ずつインクリメントされますが。スプライトは動かない。なぜだめですか?どうすれば修正できますか?現在、プログラムの他の機能をテストしようとしているので、これを起動して実行する必要があります。方法はあまり気にしません。