2013-07-07 120 views
2

我正在嘗試使用平鋪地圖編輯器使用Slick2D來製作基本的2D遊戲。我已經想出瞭如何使用TileProperties進行基本的碰撞檢測,但我不確定對象如何與地圖編輯器一起工作。我試圖做兩件事情(如果可能的話):更精確的多邊形碰撞檢測和地圖上的玩家可以拿起的遊戲物品。Java - 平鋪地圖對象

問題是我不知道如何檢查對象。我查看了Slick javadoc,並且看到了一些將int ObjectId和ObjectGroup作爲參數的方法,但我不確定如何找到它們。有人能解釋一下嗎?即使我知道如何檢查對象,我將如何掃描整個地圖以查找「項目」對象並對其執行操作,例如在該位置渲染圖像?

任何幫助將不勝感激。

編輯:我想我現在知道如何使用對象,但我仍然不知道如何獲得objectID和objectGroupID。有人能解釋一下從Tiled或Slick獲得ID嗎?

回答

1

查看java doc http://slick.ninjacave.com/javadoc/和對象TiledMap。

你所需要的這兩種方法是: getObjectGroupCount() & getObjectCount(int groupid)

getObjectGroupCount()方法會返回在您的瓷磚地圖,是對象層,或者爲每個對象層,而該標識層的總數。

getObjectCount(int groupid)將返回任何給定圖層上的對象總數或對象組內的對象數量。

從這裏你可以得到地圖中圖層的總數和每層上的對象總數,所以你知道需要循環多少次才能訪問每個對象的索引,首先是組ID,它的對象ID

我不明白的方式按名稱搜索,如果別人沒有,那麼請大家指正。否則,我建議在加載地圖時閱讀這個數組。如果有任何對象ID需要在主遊戲循環內動態調用(在繪製時),我會將ID放在某處,稍後您可以輕鬆訪問該對象。

編輯:我會做一個快速的非語法檢查或測試的代碼解釋:

TiledMap aMap = new TiledMap("whatever.tmx"); 
int objectGroupCount = aMap.getObjectGroupCount(); 
for(int gi; gi < objectGroupCount; gi++) // gi = object group index 
{ 
    int objectCount = aMap.getObjectCount(gi); 
    for(int oi; oi < objectCount; oi++) // oi = object index 
    { 
     System.out.println(aMap.getObjectName(gi, oi)); 
     System.out.println(aMap.getObjectProperty(gi, oi, "somepropertyname", "")); 
    } 
} 
+0

非常感謝你,這正是我一直在尋找! – Rayexar