2017-09-27 98 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]; 
} 

每次調用都會返回下一張圖片。當然,這取決於你想要獲得其他圖像的時間。它可能是任何東西。