使用bufferedimage重新绘制图像

时间:2017-09-27 09:52:25

标签: java

我正在学习用java编写代码,最近开始根据我的作业编写游戏。 我已经完成了几乎整个游戏,但仍然坚持游戏的动画部分。 这是我到目前为止所做的,

这是加载图像ti显示的类,

public class dpmImage {
    private BufferedImage dpm1;
    private BufferedImage setDpm1;


    public dpmImage() { //this is a constructor
        try {
            dpm1= ImageIO.read(new File("dpm1Load.png"));

        } catch (IOException e) {
            e.printStackTrace();
        }
        setDpm1 = dpm1;
    }

    private BufferedImage dpm1ImageGet() {
        return setDpm1;
    }

}

以下代码来自主类(Main.java)

private Graphics cGraphcs;
cGraphcs.drawImage(dpmImageInstance.dpm1ImageGet(), 0, 0, null);

代码工作正常并显示图像。 现在,我可以修改dpmImage类中的任何内容,但不允许修改Main.java中的任何内容,并且仍然可以使此图像具有动画效果。所以我在BufferedImage类中创建了一个dpmImage数组,并按如下方式在数组中添加第二个图像,

public class dpmImage {
    private BufferedImage [] dpm1 = new BufferedImage[2];
    private BufferedImage setDpm1;


    public dpmImage() { //this is a constructor
        try {
            dpm1[0]= ImageIO.read(new File("dpm1Load.png"));
            dpm1[1]= ImageIO.read(new File("dpm1Load1.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        setDpm1 = dpm1[0];
        setDpm1 = dpm1[1];
    }

    private BufferedImage dpm1ImageGet() {
        return setDpm1;
    }

}

但我无法将其从第一张图像设置为第二张。有人可以给我任何暗示吗?我不允许更改Main.java班级

1 个答案:

答案 0 :(得分:0)

您始终从BufferedImage方法返回相同的dpm1ImageGet。您需要从数组中获取实例。根据更新的频率,您可以简单地使用像

这样的索引
private int indexImage = 0;

private BufferedImage dpm1ImageGet() {
    indexImage = ( indexImage + 1 ) % dpm1.length; //increment and use % to prevent any ArrayOutOfBoundsException
    return dpm1[indexImage];
}

每次通话都会返回下一张图片。当然,这取决于你想要获得其他图像的时间。它可以是任何东西。