2016-06-14 5 views
1

В настоящее время я пытаюсь отобразить tilemap, который я сделал с помощью Tiled с помощью Slick2D, и все работает нормально, пока я не включу в слой слой в моем tilemap. Я искал в Интернете далеко и широко для ответа на мою дилемму, и кажется, что большинство других людей сталкиваются с этой проблемой, потому что они оставляют строки ширины и высоты объекта пустыми. Просматривая мой .tmx-файл несколько раз, я уверен, что все мои значения высоты и ширины содержат число больше нуля.ОШИБКА: для строки ввода: "", когда я добавляю слой объекта к своему элементу tilemap

Вот мой .tmx файл:

`<?xml version="1.0" encoding="UTF-8"?> 
<map version="1.0" orientation="isometric" renderorder="right-down" width="45" height="45" tilewidth="64" tileheight="32" nextobjectid="331"> 
<tileset firstgid="1" name="grassland_tiles" tilewidth="64" tileheight="32" tilecount="672" columns="16"> 
    <image source="../../../../../Downloads/grassland_tiles.png" trans="ffffff" width="1024" height="1344"/> 
</tileset> 
<layer name="Bottom" width="45" height="45"> 
    <data encoding="base64" compression="gzip"> 
    H4sIAAAAAAAAC+3DQQ0AAAwDoat/01OxHySsmqqqqqqqqqr6/gBaFaajpB8AAA== 
    </data> 
</layer> 
<layer name="Top" width="45" height="45"> 
    <data encoding="base64" compression="gzip"> 
    H4sIAAAAAAAAC+3DsQkAAAgDsL7t9y4FH3BMIAnAv2kAAAAAAADgLLnS8aKkHwAA 
    </data> 
</layer> 
<objectgroup name="Object Layer 1"> 
    <object id="327" x="96" y="96" width="96" height="96"/> 
    <object id="328" x="468" y="1106"/> 
    <object id="329" x="141.333" y="125.333"/> 
</objectgroup> 
</map> 

`

Здесь ошибка я получаю:

Mon Jun 13 22:21:27 EDT 2016 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 GameClass.init(GameClass.java:27) 
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393) 
    at org.newdawn.slick.CanvasGameContainer$1.run(CanvasGameContainer.java:69) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Mon Jun 13 22:21:27 EDT 2016 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 GameClass.init(GameClass.java:27) 
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393) 
    at org.newdawn.slick.CanvasGameContainer$1.run(CanvasGameContainer.java:69) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
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) 
    ... 19 more 
Mon Jun 13 22:21:27 EDT 2016 INFO:Starting display 1920x1001 

Я бы очень признателен, если кто-то может указать на все, что я сделал неправильно. Я довольно новичок в Slick2D и tilemaps.

ответ

0

Проблема, скорее всего, отсутствует элемент objectgroupwidth и height. Эти атрибуты раньше были написаны Тиллом, но они никогда не имели смысла. Slick2D не обнаруживает, что их нет, и пытается разобрать пустую строку в виде числа, которое вызывает , который остается неотображенным.

Наилучшим решением было бы изменить Slick2D так, что она не нуждается в width и height атрибуты на objectgroup элемента, и попытаться получить, что исправление принято выше, если он не был уже рассмотрен в последней версии развития ,

+0

Большое спасибо за ответ, @ Thorbjørn Lindeijer. Я зашел в файл '.tmx' и добавил' width' и 'height' свойства, и я больше не получал ошибок. Однако Slick2D, похоже, не распознает мой объектный слой как слой. Другими словами, метод 'getLayerCount()' не включает слой объекта, а его объектные методы (например, 'getObjectX()') возвращают '-1'. Однако слои моей плитки оказываются без каких-либо проблем. Предполагается, что слои объекта и слои плитки будут отображаться по-разному? Если да, то каким образом я могу визуализировать слои объектов? Я очень ценю вашу помощь! – Clausiel

+0

Извините, но я никогда не использовал Slick2D, поэтому я не могу ответить на любой из этих вопросов. Но, судя по причине атрибута width/height, поддержка TMX в Slick2D очень устарела, и, скорее всего, она не будет знать о объектах черепицы (например, это, как правило, только интересные вещи для рендеринга на объектном уровне). Что касается количества слоев, я полагаю, что Slick2D может считать слои плитки и слои объекта отдельно. –