Fiz exatamente igual o da aula, até usei as mesmas variáveis. Mas na hora de executar ele dá erro na FUNÇÃO TIC. Só que já revi várias vezes não encontrei nenhum problema. Meu código:
jogador = {
sprite = 260,
x= 120,
y= 68,
corDeFundo = 6,
quadroAnimacao = 1
}
objetos = {
}
Constantes = {
ALTURA_DA_TELA = 240,
LARGURA_DA_TELA= 138,
Velocidade_Jogador = 0.1
}
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)
superiorEsquerdo = {
x = jogador.x -8 + delta.deltaX,
y = jogador.y -8 + delta.deltaY
}
superiorDireito = {
x = jogador.x +7 + delta.deltaX,
y = jogador.y -8 + delta.deltaY
}
inferiorDireito = {
x = jogador.x + 7 + delta.deltaX,
y = jogador.y + 7 + delta.deltaY
}
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.quadroAnimacao = jogador.quadroAnimacao + 0.1
if jogador.quadroAnimacao >= 3 then
jogador.quadroAnimacao = 1
end
jogador.y = jogador.y + delta.deltaY
jogador.x = jogador.x + delta.deltaX
end
end
function atualiza()
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.quadroAnimacao)
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.ALTURA_DA_TELA, --quanto desenhar x
Constantes.LARGURA_DA_TELA, --quanto desenhar y
0, --em qual ponto colocar o x
0) -- em qual ponto colocar o y
end
function desenhaJogador()
spr (jogador.sprite,
jogador.x-8,
jogador.y-8,
jogador.corDeFundo,
1, --escala
0, --espelhar
0, --rotacionar
2, -- qntd blocos direita
2) --qntd blocos baixo
end
function desenhaObjetos()
for indice, objeto in pairs(objetos) do
spr(objeto.sprite,
objeto.x,
objeto.y,
objeto,corDeFundo,
1,
0,
0,
2,
2)
end
end
function desenha()
cls()
desenhaMapa()
desenhaJogador()
desenhaObjetos()
end
function fazColisaoDoJogadorComAChave(indice)
table.remove(objetos,indice)
end
function temColisao(objetoA, objetoB)
local esquerdaDeB = objetoB.x - 8
local direitaDeB = objetoB + 7
local baixoDeB = objetoB.y + 7
local cimaDeB = objetoB.y - 8
local direitaDeA = objetoA.x + 7
local esquerdaDeA = objetoA - 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 verificaColisaoComObjetos()
for indice, objeto in pairs(objetos) do
if temColisao(jogador, objeto) then
fazColisaoDoJogadorComAChave(indice)
end
end
end
function TIC()
atualiza()
verificaColisaoComObjetos()
desenha()
end
function criaChave (coluna,linha)
local chave = {
sprite = 364 ,
x = coluna * 8 ,
y = linha * 8 ,
corDeFundo = 6
}
return chave
end
function inicializacao()
local chave = criaChave(3,3)
table.insert(objetos,chave)
end
inicializacao()