2016-06-14 13 views
1

我目前正在嘗試渲染我用瓷磚使用Slick2D製作的瓷磚地圖,並且一切正常,直到我包括一個對象層在我的瓷磚地圖。我已經在互聯網上搜索了很多關於我的困境的答案,而且似乎大多數其他人都會遇到這個問題,因爲他們將對象的寬度和高度字符串留空。在多次查看我的.tmx文件之後,我確信所有的高度和寬度值都包含大於零的數字。錯誤:對於輸入字符串:「」當我添加對象層到我的瓷磚地圖

這裏是我的.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和瓷磚地圖頗爲陌生。

回答

0

問題很可能是objectgroup元素丟失widthheight屬性。這些屬性曾經很久以前由Tiled寫出來,但它們從來都沒有意義。 Slick2D無法檢測到它們不在那裏,並試圖將空字符串解析爲一個數字,這會引發一個未被捕獲的NumberFormatException

最好的解決將是修改Slick2D以便它不需要objectgroup元素的widthheight屬性,並嘗試獲取弄不好上游接受的,如果一直沒有它已經在最新的開發版本解決。

+0

非常感謝您的回覆,@ThorbjørnLindeijer。我進入'.tmx'文件並添加了'width'和'height'屬性,並且我沒有收到任何更多錯誤。然而,Slick2D似乎沒有將我的對象圖層識別爲圖層。換句話說,其'getLayerCount()'方法不包含對象層,它的對象方法(例如'getObjectX()')全部返回'-1'。然而,我的瓷磚圖層沒有任何問題。對象圖層和圖塊圖層是否應該以不同的方式渲染?如果是這樣,我該如何渲染對象圖層?我非常感謝你的幫助! – Clausiel

+0

我很抱歉,但我從來沒有使用Slick2D,所以我不能真正回答任何這些問題。但從寬度/高度屬性問題來看,Slick2D中的TMX支持已經過時了,例如(它通常是在對象層上渲染的唯一有趣的東西),它可能不知道tile對象。至於圖層數量,我猜Slick2D可能會分別計算圖塊圖層和對象圖層。 –

相關問題