制作BufferedImages的ArrayList,保持崩溃

时间:2015-05-08 22:11:24

标签: java for-loop arraylist converter bufferedimage

解决

我正在制作一个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)

我正在尝试转换string =“STARTGAME”

抱歉不好意思。

如果您需要更多代码,请给我发消息,我会发给您。

我自己解决了。我做了一个愚蠢的事情,推了=&lt;在GameStateButton类中。

问候,bjkalk

1 个答案:

答案 0 :(得分:0)

该行

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

应该阅读

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

否则,您将始终在9元素消息中读取第10个元素(元素9)。请记住,9个元素编号为0到8.事实上,对于+1,您将寻找第11个元素。

顺便说一句,我也注意到你正在进行以下调用并丢弃结果。

    msg.toUpperCase();

也许你打算

  msg = msg.toUpperCase();