Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Trancando na parede de cima

após eu chamar a função "tentaMover" no comando para ir para baixo (linha 63) quando vou pra cima e colido em uma parede ele fica trancado e não anda mais pra baixo, só para os lados, e se eu escrever o codigo inteiro(linha 27 até linha 52) no comando passando o valor do "meuDeslocamentoY" na liha 63 o codigo ele não tranca na parede

-- title:  Fuga Das Sombras
-- author: Thiago Tavares
-- desc:   RPG de acao 2d
-- script: lua

jogador = {
     sprite = 32,
     x = 120,
     y = 68
}
constantes = {
LARGURA_DA_TELA = 240,
ALTURA_DA_TELA = 130
}

function temColisaoComMapa(ponto)
    blocoX = ponto.x / 8
    blocoY = ponto.y / 8
    blocoId = mget ( blocoX, blocoY)
    if blocoId >= 128 then
        return true
    else
        return false
    end
end
function tentaMover(meuDesclocamentoY)
    superiorEsquerdo  = {
            x = jogador.x - 8,
            y = jogador.y -8 - 1
        }
        superiorDireito = {
            x = jogador.x + 7,
            y = jogador.y -8 - 1
        }

        inferiorDireito = {
        x = jogador.x + 7,
        y = jogador.y + 7 + meuDesclocamentoY
        }
        inferiorEsquerdo = {
        x= jogador.x - 8,
        y = jogador.y + 7 + meuDesclocamentoY
        }

        if temColisaoComMapa(superiorEsquerdo) or
            temColisaoComMapa (superiorDireito) or
            temColisaoComMapa(inferiorEsquerdo) or
            temColisaoComMapa(inferiorDireito) then
        else

        jogador.y = jogador.y + meuDesclocamentoY
        end

end

function movimenta()

        -- cima
    if btn (0) then
        tentaMover(-1)         
    end
    -- baixo
    if btn (1) then
        tentaMover(1)
    end
    --esqueda
    if btn (2) then
    jogador.x = jogador.x - 1
    end
    --direita
    if btn (3) then
    jogador.x = jogador.x + 1
    end

end

function desenhaMapa()
map(0, --posicao x no mapa
                0,    -- posicao y no mapa
                constantes.LARGURA_DA_TELA, --larugura
                constantes.ALTURA_DA_TELA,
                0,
                0)
end

function desenhaJogador()
    spr(jogador.sprite,
                 jogador.x - 8, 
                    jogador.y - 8,
                    0, -- cor de fundo
                    1, -- escala
                    0, -- espelhar
                    0, --rotacionar
                    2, -- quantos blocos para a direita
                    2) -- quantos blocos para baixo
end

function desenha ()
    cls ()

    desenhaMapa()
    desenhaJogador()

    print (jogador.y)


end

function TIC()

    movimenta()
    desenha ()

end
2 respostas

Para explicar melhor, se na linha 64 em vez de eu escreve apenas "tentaMover" eu botar o codigo

if btn (1) then
        meuDeslocamentoY = 1

        superiorEsquerdo  = {
            x = jogador.x - 8,
            y = jogador.y -8 - 1
        }
        superiorDireito = {
            x = jogador.x + 7,
            y = jogador.y -8 - 1
        }
        inferiorDireito = {
            x = jogador.x + 7,
            y = jogador.y + 7 + meuDeslocamentoY
        }
        inferiorEsquerdo = {
            x= jogador.x - 8,
            y = jogador.y + 7 + meuDeslocamentoY
        }
        if temColisaoComMapa(inferiorEsquerdo) or
            temColisaoComMapa(inferiorDireito) then
            --colisão
        else        
        jogador.y = jogador.y + meuDeslocamentoY
        end

ele funciona! e note que é o mesmo codigo usado na função tentarMover

OBS: primeiro vi que escrevi desclocanamento em vez de deslocamento, mas isso não gera erro, pois em todos lugares eu escrevi errado, logo ta "certo" (mas ja corrigi isso)

solução!

resolvido, o problema, o caso é que no codigo

function tentaMover(meuDesclocamentoY)
    superiorEsquerdo  = {
            x = jogador.x - 8,
            y = jogador.y -8 - 1
        }
        superiorDireito = {
            x = jogador.x + 7,
            y = jogador.y -8 - 1
        }

        inferiorDireito = {
        x = jogador.x + 7,
        y = jogador.y + 7 + meuDesclocamentoY
        }
        inferiorEsquerdo = {
        x= jogador.x - 8,
        y = jogador.y + 7 + meuDesclocamentoY
        }

        if temColisaoComMapa(superiorEsquerdo) or
            temColisaoComMapa (superiorDireito) or
            temColisaoComMapa(inferiorEsquerdo) or
            temColisaoComMapa(inferiorDireito) then
        else

        jogador.y = jogador.y + meuDesclocamentoY
        end

end

no canto superior esquerdo eu estava passando o valor

-1 em vez de botar o meuDeslocamentoY o certo seria

function tentamover(meuDeslocamentoY)

    superiorEsquerdo  = {
        x = jogador.x - 8,
        y = jogador.y -8 - meuDeslocamentoY
    }
    superiorDireito = {
        x = jogador.x + 7,
        y = jogador.y -8 - meuDeslocamentoY