Quando terminei de realizar o código no final e fui rodar apareceu este erro ":158:attempt to index a nil value (local 'objetoA')"
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(delta)
local novaPosicao = {
x = jogador.x + delta.deltaX,
y = jogador.y + delta.deltaY
}
if verificaColisaoComObjetos(novaPosicao) then
return
end
local superiorEsquerdo = {
x = jogador.x - 8 + delta.deltaX,
y = jogador.y - 8 + delta.deltaY
}
local superiorDireito = {
x = jogador.x + 7 + delta.deltaX,
y = jogador.y - 8 + delta.deltaY
}
local inferiorDireito = {
x = jogador.x + 7 + delta.deltaX,
y = jogador.y + 7 + delta.deltaY
}
local inferiorEsquerdo = {
x = jogador.x - 8 + delta.deltaX,
y = jogador.y + 7 + delta.deltaY
}
if not (temColisaoComMapa(inferiorDireito) or
temColisaoComMapa(inferiorEsquerdo) or
temColisaoComMapa(superiorDireito) or
temColisaoComMapa(superiorEsquerdo)) then
jogador.quadroDeAnimacao = jogador.quadroDeAnimacao + Constantes.velocidadeAnimacaoJogador
if jogador.quadroDeAnimacao >= 3 then
jogador.quadroDeAnimacao = 1
end
jogador.y = jogador.y + delta.deltaY
jogador.x = jogador.x + delta.deltaX
end
end
function atualizaJogo()
animacaoJogador = {
{256, 258},
{260, 262},
{264, 266},
{268, 270}
}
direcao = {
{deltaX = 0, deltaY = -1},
{deltaX = 0, deltaY = 1},
{deltaX = -1, deltaY = 0},
{deltaX = 1, deltaY = 0}
}
for tecla = 0, 3 do
if btn(tecla) then
quadros = animacaoJogador[tecla + 1]
quadro = math.floor(jogador.quadroDeAnimacao)
jogador.sprite = quadros[quadro]
tentaMoverPara(direcao[tecla + 1])
end
end
end
function desenhaMapa()
map(0, -- posicao x no mapa
0, -- posicao y no mapa
Constantes.larguraDaTela, -- quanto desenhar x
Constantes.alturaDaTela, -- quanto desenhar y
0, -- em qual ponto colocar o x inicial
0) -- em qual ponto colocar p y inicial
end
function desenhaPlayer()
spr(jogador.sprite,
jogador.x - 8,
jogador.y - 8,
jogador.corDeFundo, -- cor de fundo
1, -- escala
0, -- espelhar
0, -- rotacionar
2, -- quantos blocos para a direita
2) -- quantos blocos para a esquerda
end
function desenhaObjetos()
for indice, objeto in pairs(Objetos) do
spr(objeto.sprite,
objeto.x - 8,
objeto.y - 8,
objeto.corDeFundo,
1,
0,
0,
2,
2)
end
end
function desenhar()
cls()
desenhaMapa()
desenhaPlayer()
desenhaObjetos()
end
function fazColisaoDoJogadorComAChave(indice)
jogador.chaves = jogador.chaves + 1
table.remove(Objetos, indice)
return false
end
function temColisao(objetoA, objetoB)
local esquerdaDeB = objetoB.x - 8
local direitaDeB = objetoB.x + 7
local baixoDeB = objetoB.y + 7
local cimaDeB = objetoB.y - 8
local direitaDeA = objetoA.x + 7
local esquerdaDeA = objetoA.x - 8
local baixoDeA = objetoA.y + 7
local cimaDeA = objetoA.y - 8
if esquerdaDeB > direitaDeA or
direitaDeB < esquerdaDeA or
baixoDeA < cimaDeB or
cimaDeA > baixoDeB then
return false
end
return true
end
function fazColisaoDoJogadorComAPorta(indice)
if jogador.chaves > 0 then
jogador.chaves = jogador.chaves - 1
table.remove(Objetos, indice)
return false
end
return true
end
function verificaColisaoComObjetos(novaPosicao)
for indice, objeto in pairs(Objetos) do
if temColisao(novaPosicao, objeto) then
if objeto.sprite == Constantes.SPRITE_CHAVE then
return fazColisaoDoJogadorComAChave(indice)
elseif objeto.sprite == Constantes.SPRITE_PORTA then
return fazColisaoDoJogadorComAPorta(indice)
end
end
end
return false
end
function TIC()
atualizaJogo()
verificaColisaoComObjetos()
desenhar()
end