2014-09-22 2 views
-1

저는 타일 기반의 게임을하고 있습니다. 그러나 가구와 같은 물건으로 인해 내지도에는 여러 개의 레이어가 있습니다. 나는 (당분간은) 내 선수를 대표하는 사각형을 만들었다. 플레이어가 가구를 사용하는 것을 막으려면 레이어를 확인하는 기능을 만들어야합니다. 어떻게해야합니까?플레이어가 레이어를 통과하지 못하게하는 방법은 무엇입니까?

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

편집 : 의사 코드 아이디어 (내 플레이어의 바로 오른쪽에있는 타일에 레이어를 확인해야 가정하면) 내가 할 수있는 가능한 방법을 발견했지만 작동하지 않습니다. 나는 collidable 모든 타일의 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 

그때 문 경우 결과를 얻기 위해를 사용하여 내 캐릭터를 이동할지 여부를 결정할 수 있습니다.

답변

3

타일링 된 라이브러리 "Simple Tiled Implementation"을 사용하고 있다고 가정합니까? 그렇다면 저자입니다. 최근에 love.physics (Box2D)를 사용하여 STI에 전체 충돌 지원을 추가했습니다. 완전히 collidable 한 레이어 (예 : 가구 레이어)를 만들려면 "collidable"이라는 레이어에 맞춤 속성을 추가하고 값을 "true"로 설정하면됩니다.

이제 Tiled에는 충돌 데이터를 타일 세트의 개별 타일에 추가하는 데 사용할 수있는 충돌 편집기가 있습니다. STI는 또한 사용자 정의 특성이 필요없는이 제품을 즉시 사용할 수 있도록 지원합니다.

STI에 대한 자세한 내용은 LOVE 포럼 스레드 here을 확인하십시오.

+0

STI를 사용하지 않고 Advanced Tiled Loader를 사용하고 있습니다. https://github.com/Kadoba/Advanced-Tiled-Loader – Forrest4096

+2

ATL은 더 이상 유지 관리되지 않으며 더 이상 사용되지 않습니다. STI는 모든면에서 ATL을 대체합니다. 나는 전환을 적극 권장 할 것이다. https://love2d.org/forums/viewtopic.php?f=5&t=2567&hilit=advanced&start=240#p159482 – Karai17

+0

시도해 보았습니다. 작동하지 않았습니다. –

관련 문제