При попытке реализовать мой Tilemap Java выдает ошибку «Для входной строки:« »

1

Сейчас я столкнулся с проблемой, я просто не могу найти никакой помощи в Интернете. Я пытаюсь реализовать мой 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);
}
}

Возможно, было бы даже полезно указать мне, где может быть проблема, но я просто не могу найти соединение между кодом и ошибкой.

  • 0
    Ошибка в вашем классе TileMap который здесь не показан
  • 0
    То, что вы настроили в этом файле, это должно быть число, это пустая строка.
Показать ещё 6 комментариев
Теги:
slick2d

2 ответа

1

Имел ту же проблему с неповрежденным файлом, проверял источник 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")) ".

0

@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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню