2016-01-03 47 views
1

我正在爲#towerjam製作遊戲,我需要渲染一些我製作的字體。這是我正在使用的代碼。爲什麼我用自定義字體數組獲取ArrayIndexOutOfBoundsException?

public static void render(String msg, Graphics g, int x, int y) { 
    msg.toUpperCase(); 
    char[] msgArray = msg.toCharArray(); 
    for (char c : msgArray) { 
     System.out.println(); 
     g.drawImage(letters[c-65], x, y, Tile.DRAW_SIZE, Tile.DRAW_SIZE, null); 
     x+=Tile.DRAW_SIZE; 
    } 
} 

數組letters是從我的spritesheet中裁剪出來的BufferedImages數組。現在它給了我一個ArrayIndexOutOfBoundsException,我不知道爲什麼。

+1

您可以發佈全堆棧跟蹤?它包含的'letters'數組有多少個,哪些元素?對於'c'的什麼值,你會得到這個異常(有人告訴我這是'A-Z'範圍之外的字符,假設這些字符存儲在'letters'數組中)? – Pshemo

+0

'字母'數組是所有我製作的大寫字母'精靈。那將是26.'c'有'String'中最後一個字母的值,儘管沒有顯示出來。 – theTechnoKid

+1

這聽起來像你有一個「自定義字體」的解決方案 - 你的問題實際上是「爲什麼錯誤」?建議:1)在您最喜歡的IDE(例如Eclipse)中啓動您最喜歡的調試器,2)調用錯誤,查看回溯。獲取行#..可能是'g.drawImage()'。 3)在該行設置一個斷點。 4)再次調用錯誤。您可能會在此之前多次擊中bkpt。 5)檢查變量(例如'c')。將它與數組長度(例如'letters')進行比較。 6)瞧!在這一點上,你應該能夠解決問題:) GUESS:「c」是「越界」;) – paulsm4

回答

2

字符串是在Java中不可變的(就像許多其他語言),這樣因爲msg.toUpperCase();不能編輯原始的字符串它會創建一個新的用大寫字符,回報它

如果你想擁有這個返回存儲在msg簡單地重新分配回msg字符串:

msg = msg.toUpperCase(); 
+0

哈哈。我忘了那個。謝謝你:) – theTechnoKid

+0

以下是右上角顯示的文字:[image](http://ibin.co/2SE7yvulk4lr) – theTechnoKid

相關問題