0
respostas

Refatoração da colisão jogador/paredes parou de funcionar

Segui com o prof fez no video mas após fazer as refatorações do código de colisões o jogo carrega normal mas após apertar qualquer tecla para movimentar ele entra na tela de terminal com as seguites mensagens:

[string "-- title: Fuga das Sombras..."]:27: attempt to index a nil value (local 'ponto') stack traceback: [string "-- title: Fuga das Sombras..."]:27: in function 'temColisaoComMapa' [string "-- title: Fuga das Sombras..."]:55: in function 'tentaMoverPara' [string "-- title: Fuga das Sombras..."]:76: in function 'atualiza' [string "-- title: Fuga das Sombras..."]:110: in function 'TIC'

O código esta na seguinte forma:

-- title: Fuga das Sombras
-- author: Renato Arantes
-- desc: RPG de acao 2D
-- script: lua

constantes = {
        LARGURA_TELA = 240,
        ALTURA_TELA = 138}

mapa = {
        posicaoMapaX = 0,
        posicaoMapaY = 0,
        posicaoX = 0,
        posicaoY = 0}

jogador = {
        sprite = 32,
        posicaoX = 120,
        posicaoY = 68,
        corFundo = 0,
        fatorEscala = 1,
        fatorEspelhamento = 0,
        fatorRotacao = 0,
        tamanhoSprite = 2}

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 tentaMoverPara(deslocamentoX, deslocamentoY)
        superiorEsquerdo = {
                x = jogador.posicaoX - 8 + deslocamentoX,
                y = jogador.posicaoY - 8 + deslocamentoY
        }
        superiordireito = {
                x = jogador.posicaoX + 7 + deslocamentoX,
                y = jogador.posicaoY - 8 + deslocamentoY
        }
        inferiorEsquerdo = {
                x = jogador.posicaoX - 8 + deslocamentoX,
                y = jogador.posicaoY + 7 + deslocamentoY
        }
        inferiorDireito = {
                x = jogador.posicaoX + 7 + deslocamentoX,
                y = jogador.posicaoY + 7 + deslocamentoY
        }
        if temColisaoComMapa(superiorEsquerdo) or
            temColisaoComMapa(superiorDireito) or
            temColisaoComMapa(inferiorEsquerdo) or
            temColisaoComMapa(inferiorDireito) then
                    --Tem Colisao!!!
        else
                jogador.posicaoX = jogador.posicaoX + deslocamentoX
                jogador.posicaoY = jogador.posicaoY + deslocamentoY        
        end
end

function atualiza()
        if btn(0) then
                tentaMoverPara(0 , -1)
        end
        if btn(1) then
                tentaMoverPara(0 , 1)
        end
        if btn(2) then
                tentaMoverPara(-1 , 0)
        end
        if btn(3) then
                tentaMoverPara(1 , 0)
        end
end 

function desenhaMapa()
        map(
            mapa.posicaoMapaX,
            mapa.posicaoMapaY,
            constantes.LARGURA_TELA,
            constantes.ALTURA_TELA,
            mapa.posicaoX,
            mapa.posicaoY)
end

function desenhaJogador()
     spr(
         jogador.sprite,
        jogador.posicaoX - 8,
         jogador.posicaoY - 8,
         jogador.corFundo,
         jogador.fatorEscala,
        jogador.fatorEspelhamento,
         jogador.fatorRotacao,
         jogador.tamanhoSprite,
         jogador.tamanhoSprite)
end

function desenha()
        cls()
        desenhaMapa()
        desenhaJogador()
end

function TIC()
        atualiza()
        desenha()
end

Pela mensagem eu entendi que o problema esta na variavel "ponto" que colocamos e que nao esta definida mas ela aparece como valor de substituição para as variaveis dos pontos que foram definidas na função tentaMoverPara( ), superiorEsquerda, superiorDIreita, etc. Mas não soube como consertar isso, alguem poderia me ajudar por favor?