2017-09-27 34 views
1

我正在学习用java编写代码,并且最近开始按照我的任务编写游戏。 我已经完成了几乎整个游戏,但坚持游戏的动画部分。 以下是我迄今所做的,使用bufferedimage重新绘制图像

这是加载图像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中的任何内容,并仍然使此图像具有动画效果。所以,我在dpmImage类中创建的BufferedImage的阵列和阵列中添加第二个图像如下,

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类别

+0

那么,你有一个数组,但你''setDpm1''初始化了两次,'dpm1 [1]'。您可能希望能够根据某些内容返回'dpm1 [0]'或'dpm1 [1]'。 – AxelH

回答

0

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

private int indexImage = 0; 

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

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