2015-05-08 2 views
0

SOLVEDСделать ArrayList из BufferedImages, Keep Crashing

Я делаю java-игру. Я пытаюсь преобразовать текст в BufferedImages, которые являются моими плитами. Но каждый раз, когда я получаю ошибку, и я не знаю, что не так.

Надеюсь, вы можете мне помочь.

package my.tdl.main; 

import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.util.ArrayList; 

import my.project.gop.main.SpriteSheet; 
import my.project.gop.main.loadImageFrom; 

public class Font { 

private static String chars = " ABCDEFGHIJKLMNOPQRSTUVWXYZ.,?!:'1234567890 "; 
public ArrayList<BufferedImage> msg_img = new ArrayList<BufferedImage>(); 
public static SpriteSheet text = new SpriteSheet(); 

public Font(String msg, Color colour) { 
    text.setSpriteSheet(loadImageFrom.LoadImageFrom(Main.class, "textSheet.png")); 
    msg.toUpperCase(); 
    System.out.println(msg); 
    System.out.println(msg.length()); 

    for (int i = 0; i <= msg.length() + 1; i++) { 
     System.out.println(i); 
     int charIndex = chars.indexOf(msg.charAt(i)); 
     System.out.println(chars.charAt(charIndex)); 
     if (charIndex > 0) { 
      System.out.println(charIndex * 16 + ", 0, 16, 16"); 
      BufferedImage image = text.getTile(charIndex * 16, 0, 16, 16); 
      Graphics2D g = image.createGraphics(); 
      g.setColor(colour); 
      g.fillRect(0, 0, image.getWidth(), image.getHeight()); 
      msg_img.add(image); 
     } 
    } 
} 

public ArrayList<BufferedImage> getMsg_img() { 
    return msg_img; 
} 

} 

это выход:

STARTGAME 
9 
0 
S 
304, 0, 16, 16 
1 
T 
320, 0, 16, 16 
2 
A 
16, 0, 16, 16 
3 
R 
288, 0, 16, 16 
4 
T 
320, 0, 16, 16 
5 
G 
112, 0, 16, 16 
6 
A 
16, 0, 16, 16 
7 
M 
208, 0, 16, 16 
8 
E 
80, 0, 16, 16 
Exception in thread "Thread-2" java.lang.IndexOutOfBoundsException: Index: 9, Size: 9 
at java.util.ArrayList.rangeCheck(Unknown Source) 
at java.util.ArrayList.get(Unknown Source) 
at my.tdl.gamestate.GameStateButton.render(GameStateButton.java:87) 
at my.tdl.gamestates.MenuState.render(MenuState.java:38) 
at my.tdl.gamestate.GameStateManager.render(GameStateManager.java:22) 
at my.tdl.gameloop.Gameloop.render(Gameloop.java:37) 
at my.project.gop.main.GameLoop.run(GameLoop.java:73) 
at java.lang.Thread.run(Unknown Source) 

Я пытаюсь преобразовать строку = "StartGame"

Извините за плохой Enlish.

Если вам нужно больше кода, пришлите мне сообщение, и я пришлю вам его.

Я решил это сам. Я сделал тупое дело и поместил = < в класс GameStateButton.

поздравления, bjkalk

+1

Пожалуйста, укажите класс 'GameStateButton' и метод' render', особенно линии 87. –

ответ

0

Линия

for (int i = 0; i <= msg.length() + 1; i++) { 

Следует читать

for (int i = 0; i < msg.length(); i++) { 

В противном случае вы всегда будете читать 10-й элемент (элемент девять) в сообщении с 9 элементов. Помните, что 9 элементов пронумерованы от 0 до 8. На самом деле с +1 вы будете искать 11-й элемент.

Кстати, я также заметил, что вы делаете следующий вызов и отбрасываете результат.

msg.toUpperCase(); 

возможно вы намеревались

msg = msg.toUpperCase(); 
Смежные вопросы