2014-09-22 39 views
-1

我正在開發基於圖塊的遊戲。但是,由於傢俱等因素,我的地圖有多個圖層。我(暫時)創建了一個廣場來代表我的球員。爲了阻止我的玩家在傢俱上行走,我需要製作一個檢查圖層的功能。我怎麼做? (假如我需要在平鋪層檢查到我的球員立即右) 僞代碼的想法:如何阻止玩家穿越圖層?

function checkLayers() 
    for every layer in map 
     if layer == "furniturelayer" then 
      stop player 
     end 
    end 
end 

編輯:我發現了一個可能的方式做到這一點,但它不工作。我有一個數組,其中包含可碰撞的所有圖塊的GID。然後,我遍歷所有圖層並檢查該圖塊是否具有該GID。代碼:

function gCheckGID(gMap, gLayer, tileX, tileY) 

    tilex = gMap.layers[gLayer]:get(tileX, tileY) 
    return tilex.id 

end 

function gCheckMovement(gMap, gArray, gTileX, gTileY) 

    local retVal = true 
    local layerArray = gMap.layers 
    local layers = table.getn(layerArray) 

    for layerCounter = 1, layers, 1 do 
     currGID = gCheckGID(gMap, layerArray[layerCounter], gTileX, gTileY) 
     for gidCounter = 1, table.getn(gArray), 1 do 
      if currGID == gArray[gidCounter] then 
       retVal = false 
       break 
      end 
     end 
    end 

    return retVal 

end 

if語句然後我就可以使用得到的結果,並決定是否將我的角色或沒有。

回答

3

我假設你正在使用平鋪庫「Simple Tiled Implementation」?如果是這樣,我是作者。我最近剛剛使用love.physics(Box2D)向STI添加了完全碰撞支持。如果你想創建一個完全可碰撞的圖層(比如傢俱層),那麼你需要做的就是在Tiled中爲你的圖層添加一個名爲「collidable」的自定義屬性,並將其值設置爲「true」。

Tiled現在有一個碰撞編輯器,可用於將碰撞數據添加到拼圖中的各個拼貼。 STI也支持這種開箱即用,無需自定義屬性。

欲瞭解更多有關STI的信息,請查看LOVE論壇主題here

+0

我沒有使用STI,我使用的是Advanced Tiled Loader。 https://github.com/Kadoba/Advanced-Tiled-Loader – Forrest4096 2014-09-24 07:25:52

+2

ATL不再被維護並已被棄用。 STI以各種方式取代ATL。我強烈建議切換。 https://love2d.org/forums/viewtopic.php?f=5&t=2567&hilit=advanced&start=240#p159482 – Karai17 2014-09-24 15:50:01

+0

試過,沒有工作 – 2017-01-04 10:25:03