解决
我正在制作一个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
答案 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();