2011-04-05 81 views
0

我有一個類負責動畫的一些圖像。我有3個玩家類,每個類都創建自己的這個動畫類的實例。每個玩家類都向我的動畫類發送一個String路徑和一個String數組文件名。因此,我要做的是檢查文件名的字符串數組是以向上,向下,向左還是向右開始。然後,我將它們添加到一組緩衝的圖像中,總共4個,分別命名爲上,下,左和右。字符串數組迭代和startsWith()

現在,當玩家想要向左移動時,左邊的[]會生成動畫,向上的方向也是如此。問題是每個數組中只有一個圖像被存儲。例如,緩衝圖像的up []只能保持一個圖像,而它們應該是3(每個方向有3個圖像)。我無法弄清楚。

以下代碼來自處理數組的Animation類。有人可以告訴我,我是否錯過了一些東西?

如果本作絕對沒有任何意義,我道歉:)...在我的頭上

感謝

try 
    { 
     for (String file : fileName) 
     { 
      String path = PATH + file + EXT; 

      for (int i = 0; i < arrayLength; i++) 
      { 
       if (file.startsWith("u")) 
       { 
        up[i] = ImageIO.read(new File(path)); 
       } 

       if(file.startsWith("d")) 
       { 
        down[i] = ImageIO.read(new File(path)); 
       } 

       if (file.startsWith("l")) 
       { 
        left[i] = ImageIO.read(new File(path)); 
       } 

       if (file.startsWith("r")) 
       { 
        right[i] = ImageIO.read(new File(path)); 
       } 
      } 
     } 
    } 
    catch (IOException e) 
    { 
     System.out.println("Could not load images: " + e); 
    } 
    catch (ArrayIndexOutOfBoundsException e) 
    { 
     System.out.println("Array out of bounds: " + e); 
    } 

回答

0

我在描述後遇到了一些麻煩,但在這裏查看您的代碼是我的想法,可能是您的問題。首先與你的問題無關的編碼建議,你有與ifs一起測試的相互排斥的情況(file.startsWith(...)),你應該有其他的東西,這樣當一個測試正面時其他人可以被忽略:

for (String file : fileName) { 
    String path = PATH + file + EXT; 

    for (int i = 0; i < arrayLength; i++) { 
    if (file.startsWith("u")) { 
     up[i] = ImageIO.read(new File(path)); 
    } else if(file.startsWith("d")) { 
     down[i] = ImageIO.read(new File(path)); 
    } else if (file.startsWith("l")) { 
     left[i] = ImageIO.read(new File(path)); 
    } else if (file.startsWith("r")) { 
     right[i] = ImageIO.read(new File(path)); 
    } 
    } 
} 

至於代碼的邏輯,我看到的一個潛在的問題是你的數組索引似乎沒有正確鏈接到文件。截至目前,您的代碼可以正是如此改寫不改變其作用:

for (String file : fileName) { 
    String path = PATH + file + EXT; 

    BufferedImage array = null; 
    if (file.startsWith("u")) { 
    array = up; 
    } else if(file.startsWith("d")) { 
    array = down; 
    } else if (file.startsWith("l")) { 
    array = left; 
    } else if (file.startsWith("r")) { 
    array = right; 
    } 

    for (int i = 0; i < arrayLength; i++) { 
    array[i] = ImageIO.read(new File(path)); 
    } 
} 

你只是用相同的路徑寫一個新的緩衝圖像整個數組(或任何部分由變量「arrayLength」包括在內)在外部循環的每次迭代中。因此,如果「file」每次都是相同的類型(即startsWith是相同的值),那麼您的數組將只包含fileName數組中的最後一項。

這裏是我將開始猜測你的意圖的地方。我認爲,在名的每個字符串,則應該是動畫的特定方向的陣列中,然後在下一個圖像中的一個路徑,所以你需要的是一個單獨的索引到每個陣列:

int upArrayIndex = 0, downArrayIndex = 0, 
    leftArrayIndex = 0, rightArrayIndex = 0; 
for (String file : fileName) { 
    String path = PATH + file + EXT; 

    if (file.startsWith("u")) { 
    up[upArrayIndex++] = ImageIO.read(new File(path)); 
    } else if(file.startsWith("d")) { 
    down[downArrayIndex++] = ImageIO.read(new File(path)); 
    } else if (file.startsWith("l")) { 
    left[leftArrayIndex++] = ImageIO.read(new File(path)); 
    } else if (file.startsWith("r")) { 
    right[rightArrayIndex++] = ImageIO.read(new File(path)); 
    } 
} 

我希望這對於你所問的問題來說,這是正確的方向,或者至少讓你知道從哪裏開始。

+0

是的,在netbeans通過dubugger後,我發現每個數組都被填充相同的圖像。我想保持Animation類儘可能通用,以便傳遞給它的任何數組,上,下,左,右圖像將被放入相應的數組中,並相應地進行動畫處理。感謝回覆,它的幫助很大。我想我知道如何處理這個現在:) – 2011-04-05 19:28:59

0

這裏有一個非答案的答案聽起來不錯。使用調試器在此方法中設置斷點。您是否在像Eclipse這樣的IDE中運行此代碼?當你真正看到你程序的執行流程時,造成這個問題的根源會容易得多 - 它對於任何想要真正理解某些給定代碼的開發者來說都是一個必不可少的工具。作爲一個方面說明,我認爲你的問題與arrayLength有關。

+0

我正在使用NetBeans,目前正在使用dubugger。它看起來像是用第一張圖片填充陣列,然後是第二張,最後是第三張。因此,我似乎最終與陣列充滿了相同的圖像..hmmmmm – 2011-04-05 19:10:32