Создайте ArrayList из BufferedImages, продолжайте сбой

РЕШЕНО

Я делаю 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"

Извините за плохой английский.

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

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

привет, бжкалк


person yolo-lol    schedule 08.05.2015    source источник
comment
Укажите класс GameStateButton и метод render, особенно строку 87.   -  person Luiggi Mendoza    schedule 09.05.2015


Ответы (1)


Линия

   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();
person redge    schedule 08.05.2015