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

attempt to call a nil value em funcaoDeColisao

Na aula 6 na parte :

function verificaColisaoComObjetos(personagem, novaPosicao)
 for indice, objeto in pairs(objetos) do
  if temColisao(novaPosicao, objeto) then
   local funcaoDeColisao = objeto.colisoes[personagem.tipo]
   return funcaoDeColisao(indice)
  end
 end
 return false
end

Meu codigo esta dando a mensagem de erro :attempt to call a nil value (local 'funcaoDeColisao ') ,quais podem ser as causas ?de onde mais ela esta pegando esse valor?

1 resposta

Olá Luciano,

Acho que vamos precisar ver o seu código completo para conseguir te ajudar. O que parece estar acontecendo é que a variável funcaoDeColisao não está sendo preenchida corretamente quando lemos o atributo objeto.colisoes. Pode ser que o tipo do personagem e as chaves usadas na tabela de colisão não estão batendo. Exemplo:

colisao = {
  INIMIGO = colisaoComInimigo,
  PORTA = colisaoComPorta
}

local funcaoDeColisao = colisao[PORTAO];

Repare que escrevi erradao PORTAO de propósito ao ler a tabela colisao. Se eu fizer isso, a Lua não vai encontrar essa chave na tabela colisao e vai atribuir nil para a funcaoDeColisao. Aí quando formos invocar essa função teremos o erro que está acontecendo no seu código.

Se quiser pode dar uma conferida nesses pontos e se não conseguir encontrar nada de errado, posta aqui o código e ajudamos.