2016-01-31 36 views
2

我正在加載平鋪地圖的Libgdx遊戲。我正在處理的當前地圖使用了2個tilesets,一個用於陰影/燈光,另一個用於地形和建築物。我所做的一般過程一直工作正常,是我從藝術家處接收精靈表,設計地圖,然後獲取spritesheet文件並使用ImageMagick對其進行分割。從那裏我採取分割圖像,並使用TexturePacker創建優化的PNG和地圖集文件。Libgdx AtlasTmxMapLoader具有多種可能性

但是,這是我製作的第一張使用多個貼圖集的地圖。我遇到的問題是使用AtlasTmxMapLoader加載地圖時,它依賴地圖中的單個atlas文件屬性。我的陰影和光線被分割成單獨的圖像和圖集,而不是將它們全部合併到Tiled中的一箇中(並且必須重新制作地圖的一部分)。

也許我錯過了一些簡單的東西。我如何處理多個tileset?

+0

請分享您的代碼。 –

回答

1

因此,在閱讀了更多的.tmx文件後,我能夠解決我的問題。

下面是如何正確使用多個tileset並在TexturePacker中重新打包Spritesheet時的操作。首先,使用像ImageMagick這樣的實用程序剪切tileset圖像,並確保它們被索引(由文件名中的下劃線和數字指定)。你可以用作物命令在ImageMagick的,像這樣做:

convert.exe "shrine_tileset.png" -crop 16x16 "shrine_tileset_%02d.png"

其次,重新打包所有tilesets所有瓷磚到TexturePacker單一圖譜。如果工作正常,您將在地圖集文件中看到每個tileset的名稱以及基於tile ID的關聯索引。例如:

shrine_tileset 
    rotate: false 
    xy: 382, 122 
    size: 16, 16 
    orig: 16, 16 
    offset: 0, 0 
    index: 703 

最後(這是我無法弄清楚的部分),確保每個地形設置的瓷磚指數從.tmx文件中的「firstgid」值開始。例如,我的第二張瓷磚從2049開始,因爲它們是第一張中的2048個瓷磚。這應該表示在每個tileset的.tmx文件的頂部。 「shadow_light_2048.png」:

<tileset firstgid="2049" source="shadow_light.tsx"/> 

所以切碎這些磚爲我的地形設置「shadow_light」的時候,我就從指數2048,較GID一個都不能少,EX啓動它們。

希望這可以幫助別人!

1

我不是LibGDX專家,但幾乎所有我見過的瓷磚地圖渲染器都依靠1個tileset工作。原因是它們使用OpenGL渲染。渲染器設置紋理並使用1繪製調用繪製所有圖塊。你不能在兩者之間切換紋理。

最好的方法是創建2個(或更多)單獨的圖層。每個圖層使用1個tileset。例如。 1爲背景,1爲陰影,1爲前景(例如牆壁)。

+0

謝謝你的回覆。我不確定我完全理解。我的第二個tileset實際上只在一個單獨的地圖圖層上(陰影/光照圖層)。我如何設置AtlasTmxMapLoader與兩者兼容? – Arbel

+0

我認爲你不能(......但正如我已經說過的:我不是LibGDX專家)。 您可以使用不同的地圖集加載2個關卡級別的實例(您可能需要修補tmx文件 - 或以編程方式指定地圖集)並覆蓋它們。 覆蓋層我的意思是:創建2層,將它們附加到同一父節點並顯示它們,就好像它們是單層。 –

+0

這聽起來像是一團糟。但它確實讓我思考。如果我能以某種方式將Texture Packer中的圖像合併到一個可與libgdxs瓷磚地圖渲染器配合使用的地圖集中,那麼一個地圖集並不是問題。如果瓦片的名稱相應匹配瓦片集(和索引),它應該可以工作。不過,我確實測試過,它似乎沒有繪製我的陰影/光線層。這一直是一個普遍的事情,雖然對嗎?多個拼圖集在任何大型地圖上都有。 Id只是爲了避免在Tiled中有一個單獨的tileset。我不介意它被合併成一個外面的瓷磚。 – Arbel