Сейчас я столкнулся с проблемой, я просто не могу найти никакой помощи в Интернете. Я пытаюсь реализовать мой tilemap, который я сделал с помощью Tiled в моем проекте Java Slick2D, но я не могу обойти этот код ошибки:
ERROR:For input string: ""
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at org.newdawn.slick.tiled.TiledMap$ObjectGroup.<init>(TiledMap.java:1008)
at org.newdawn.slick.tiled.TiledMap.load(TiledMap.java:688)
at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:106)
at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:90)
at simpleslickgame.SpielTest.init(SpielTest.java:36)
at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
at simpleslickgame.SpielTest.main(SpielTest.java:25)
Fri Dec 26 22:47:27 CET 2014 ERROR:Failed to parse tilemap
org.newdawn.slick.SlickException: Failed to parse tilemap
at org.newdawn.slick.tiled.TiledMap.load(TiledMap.java:695)
at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:106)
at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:90)
at simpleslickgame.SpielTest.init(SpielTest.java:36)
at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
at simpleslickgame.SpielTest.main(SpielTest.java:25)
Caused by: java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at org.newdawn.slick.tiled.TiledMap$ObjectGroup.<init>(TiledMap.java:1008)
at org.newdawn.slick.tiled.TiledMap.load(TiledMap.java:688)
... 6 more
Я просто не могу найти способ обдумать это. Я не работаю с любыми входами, которые могут оказаться во входной строке. Я просто не могу понять, что я делаю неправильно.
Это мой код:
package simpleslickgame;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.tiled.TiledMap;
public class SpielTest extends BasicGame
{
public TiledMap map;
public SpielTest()
{
super("Test");
}
public static void main(String[] arguments)
{
try
{
AppGameContainer app = new AppGameContainer(new SpielTest());
app.setDisplayMode(1000, 800, false);
app.start();
}
catch (SlickException e)
{
e.printStackTrace();
}
}
@Override
public void init(GameContainer container) throws SlickException
{
map=new TiledMap("res/Slickesdingbruder.tmx");
}
@Override
public void update(GameContainer container, int delta) throws SlickException
{
}
public void render(GameContainer container, Graphics g) throws SlickException
{
map.render(0, 0);
}
}
Возможно, было бы даже полезно указать мне, где может быть проблема, но я просто не могу найти соединение между кодом и ошибкой.
Имел ту же проблему с неповрежденным файлом, проверял источник Slick2D. Эта ошибка вызвана попыткой загрузить карту с помощью слоя объекта, свойства "ширина" и "высота" не определены или не могут быть проанализированы как целые числа в теге XML "objectgroup" (файлы.tmx - это XML). Версия Slick2D библиотеки Tiled Java ожидает их (она не использует их ни для чего, насколько я могу судить - версия, в которой я полностью игнорировал объекты карты в своем коде рендеринга), а редактор карты Tiled обычно не был ( если когда-либо) определить их - если вам действительно нужна ограничивающая рамка для слоя объекта, она лучше всего вычисляется после загрузки карты.
Надеемся, что это будет исправлено, но самым простым обходным .tmx
является .tmx
файла .tmx
в текстовом редакторе и вставка width="1" height="1"
в каждом теге objectgroup. Это можно было бы автоматизировать, сначала загрузив файлы.tmx в String, выполнив find()
или regex, и заменив и вызвав конструктор TiledMap
" new ByteArrayInputStream(tmxString. getBytes(Charset.forName("UTF-8"))
".
@Dana Otken, ширина = "1" height = "1" в.tmx файле необходима, но я заметил еще один фактор. Если вы действительно используете Tiled, вы ДОЛЖНЫ убедиться, что КАЖДЫЙ объект на каждом объектном слое имеет целые числа для следующих значений: Ширина, Высота, местоположение X и местоположение Y. Вот почему: тип данных int НЕ МОЖЕТ обрабатывать десятичные числа. Вы можете вспомнить, для чего нужен двойной тип данных. Когда slick (или lwjgl, я не помню, какой) пытается использовать метод parseInt со строковым вводом, он выдает эту ошибку и не может работать. ПОМНИТЕ: Int не может хранить десятичное значение, и вы используете метод parseInt.
PS У вас не может быть доли пикселя, поэтому даже если у вас есть двойное значение с фактическим десятичным значением, это не имеет смысла, потому что пиксели не могут быть далее разделены.
Надеюсь это поможет!
Аналогичная SO-страница здесь: https://gamedev.stackexchange.com/questions/93607/how-import-and-draw-a-tiledmap-with-slick2d/122051#122051
TileMap
который здесь не показан