2014-03-03 2 views
0

타일 충돌 방식에 문제가 있습니다. 어떤 이유로 플레이어는 할 수 없을 때 어떤 타일을 통과 할 수 있습니다. 또한, 왜 그런지 모르겠지만 왜 붙어있을 때 왼쪽으로 물체를 통해 이동할 수 있지만 왼쪽에만 있습니다. 아래에 몇 가지 코드를 게시하고 누군가가 올바른 방향으로 나를 가리킬 수 있다면 좋을 것입니다. (또는 누군가가 빠른 해결책을 찾을 수 있다면 더 좋을 것입니다!) 내 플레이어 이동 메서드와 타일 충돌 메서드는 모두 update 메서드에서 호출됩니다. 당신이 testTile(x,y)의 4 if 문에 오타가 있기 때문에이 붙어 때 이유 왼쪽이 작동Love2D 타일 기반 충돌이 작동하지 않습니다.

지도 타일 COLLISIONS

map = { {1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {2,2,1,1,1,3,3,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     {1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, 
     } 

function testTile(x,y) 
    if map[y][x + 1] == 1 then 
     canRight = true 
    end 

    if map[y][x + 1] ~= 1 then 
     canRight = false 
    end 

    if map[y][x - 1] == 1 then 
     canLeft = true 
    end 

    if map[y][x - 1] ~= 1 then 
     canRight = false 
    end 

    if map[y + 1][x] == 1 then 
     canDown = true 
    end 

    if map[y + 1][x] ~= 1 then 
     canDown = false 
    end 

    if map[y - 1][x] == 1 then 
     canUp = true 
    end 

    if map[y - 1][x] ~= 1 then 
     canUp = false 
    end 
end 

function movePlayer(dt) 

    if love.keyboard.isDown("right") and canRight then 
     playerX = playerX + 1 * dt 
    end 

    if love.keyboard.isDown("left") and canLeft then 
     playerX = playerX - 1 * dt 
    end 

    if love.keyboard.isDown("down") and canDown then 
     playerY = playerY + 1 * dt 
    end 

    if love.keyboard.isDown("up") and canUp then 
     playerY = playerY - 1 * dt 
    end 
end 
+0

StackOverflow에 오신 것을 환영합니다. 질문에 태그를 지정할 때는주의를 기울여서 *이 * 사이트에서 의미가 무엇인지에 대한 설명을 확인하십시오. 예를 들어, 전문가 및 다른 프로그래머를위한 사이트이기 때문에 RPG 태그는 게이머의 느슨한 용어가 아닌 전문 프로그래머가 주로 사용하는 RPG 언어를 의미합니다. – WarrenT

답변

2

가능성이있다.

당신은

if map[y][x - 1] ~= 1 then 
    canRight = false 
end 

를 썼다는 이유는 입력 오류입니다

if map[y][x - 1] ~= 1 then 
    canLeft = false 
end 
0

해야한다 : 당신이 left를 이동할 수없는 경우가 falsecanRight을 설정

if map[y][x - 1] ~= 1 then 
    canRight = false; 
end 

. 복사/붙여 넣기 오류 일 가능성이 있으므로 은 코드를 복사/붙여 넣기 할 때 항상주의를 기울입니다. 이것은 가장 일반적인 실수 중 하나이며,이 실수를 감지하기 어려운 : P

또 다른 작은 제안 : 대신

if map[y][x - 1] == 1 then 
    canLeft = true; 
end 
if map[y][x - 1] ~= 1 then 
    canLeft = false; 
end 

를 사용하는 그것은을 만들 것입니다 당신이

else canLeft = false; 

를 사용할 수 있습니다 코드가 짧고 내 의견으로는 더 깨끗합니다.