Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro: Attempt to index a nil value (Local 'ponto' )

Olá, fiz o passo a passo. Na última etapa, o jogo abre após digitar ''>run'' no Tic80, e funciona normalmente caso eu movimente para a esquerda, direita ou para baixo.

No entanto, ao apertar para cima após colocar o comando ''>run'' , o jogo para de funcionar, retorna, e o Tic80 informa:

[string ''...'' ] :21:attempt to index a nil value (local 'ponto' )
stack traceback:
[string ''...'' ]:21: in function 'temColisaoComMapa''
[string ''...'' ] :40: in function 'movimento'
 [string ''...'' ] :104: in function 'Tic'

EDITADO: [Solucionado]

Escrita com letras minúsculas e maiúsculas causaram o problema. Pode fechar o tópico.

superioresquerdo = {
    x = jogador.x - 8,
    y = jogador.y - 8 - 1
    }
superiorDireito = {
    x = jogador.x + 8,
    y = jogador.y - 8 - 1
}

if temColisaoComMapa(superiorEsquerdo)

Segue abaixo os meus códigos:


-- title:  The First Adventure
-- author: Breno C. Souza
-- desc:   Our First Adventure!
-- script: lua

jogador = {
 sprite = 32,
    x = 120,
    y = 68,
}

Consantes = {
LARGURA_DA_TELA = 240,
ALTURA_DA_TELA = 138,

}


function temColisaoComMapa(ponto)
    blocoId = mget(ponto.x / 8, ponto.y / 8)
        if blocoId >= 128 then 
            return true
        else
            return false
        end
end

function movimento()
--CIMA
    if btn(0) then
superioresquerdo = {
    x = jogador.x - 8,
    y = jogador.y - 8 - 1
    }
superiorDireito = {
    x = jogador.x + 8,
    y = jogador.y - 8 - 1
}
    if temColisaoComMapa(superiorEsquerdo) or
         temColisaoComMapa(superiorDireito) then
        -- colisao!!
    else
        jogador.y = jogador.y - 1
    end
end

--BAIXO
 if btn(1) then
  jogador.y = jogador.y + 1
  end

--DIREITO
 if btn(2) then
  jogador.x = jogador.x -1
  end

--ESQUERDO
 if btn(3) then
  jogador.x = jogador.x +1
  end

end



function desenhaMapa()

map(0, -- posicao x no mapa
    0, -- posicao y no mapa
                Consantes.LARGURA_DA_TELA, -- quanto desenhar x
                Consantes.ALTURA_DA_TELA, -- quanto desebgar y
                0, -- qual ponto colocar o x 
                0) -- em qual ponto colocar o y inicial
end

function desenhaJogador()

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

function desenho()
cls()
    desenhaMapa()
    desenhaJogador()

 print(jogador.y)
 blocoid = mget((jogador.x-8) / 8, (jogador.y-8) / 8)
 if blocoid >= 128 then
 print(blocoid, 0, 16)
 end

end

function TIC()
 movimento()
    desenho()
end
1 resposta
solução

Que bom que você conseguiu solucionar!