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

Erro ao tentar mover heroi

function colideComObjeto(indice)
    table.remove(objeto,indice)
end

function temColisao(A,B)

    local esquerdaB = B.x - 8
    local direitaB = B.x +7
    local baixoB = B.y + 7
    local cimaB = B.y - 8

    local esquerdaA = A.x - 8
    local direitaA = A.x + 7
    local baixoA = A.y + 7
    local cimaA = A.y - 8 

    if esquerdaB > direitaA or
        direitaB < esquerdaA or
        baixoA < cimaB or
        cimaA     > baixoA then
            return false
        end
         return true
    end

function colisaoObjeto()
    for indice,objeto in pairs(objeto) do
        if temColisao(jogador,objeto) then
            colideComObjeto(indice)
        end
    end
end

function TIC()

    atualiza()
    colisaoObjeto()
    desenha()    

end

Bom dia, estou com um erro na linha 164( local esquerdaB = B.x - 8 ), 164:attempt to index a nil value (local 'B')

o jogo inicializa normalmente, o erro só ocorre quando tento andar com o jogador, o mesmo erro ocorre quando copio e colo o código exato do exercicio ou da video aula, alguem poderia me ajudar ?

2 respostas
solução!

Olá Marcos,

Acredito que o problema esteja aqui:

function colisaoObjeto()
    for indice,objeto in pairs(objeto) do
        if temColisao(jogador,objeto) then
            colideComObjeto(indice)
        end
    end
end

Mais especificamente quando invocamos a função pairs no for, queremos passar como parâmetro a lista de objetos objetos. No código acima, estamos passando objeto que provavelmente nesse momento é uma variável com valor nil pois ela não foi inicializa. Por isso quando chamamos o temColisao passando esse valor objeto, recebemos a mensagem de erro de que B (segundo parâmetro) está nulo.

Tenta fazer essa troca de objeto para objetos e vê se ajuda!

Graças a explicação acima deu tudo certo, o problema real era que a função temColisao já existia para o background do jogo, mas a solução acima me ajudou a entender a função pairs no for e também era um erro que iria desencadear assim que solucionasse o primeiro.

Obrigado (: