Olá, terminei a Aula 4. Mas depois que o heroi encosta na porta ele nao se movimenta mais. Se eu pego a chave, parece que está tudo normal. Pode me ajudar?
jogador = {
sprite = 260,
x = 80,
y = 68,
corDeFundo = 6,
quadroDeAnimacao = 1,
chaves = 0
}
Constantes = {
LARGURA_DA_TELA = 240,
ALTURA_DA_TELA = 138,
VELOCIDADE_JOGADOR = 0.1,
SPRITE_CHAVE = 364,
SPRITE_PORTA = 366
}
objetos = {}
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},
}
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
meuDeslocamentoX = delta.deltaX
meuDeslocamentoY = delta.deltaY
local superiorEsquerdo = {
x = jogador.x - 8 + meuDeslocamentoX,
y = jogador.y - 8 + meuDeslocamentoY
}
local superiorDireito = {
x = jogador.x + 7 + meuDeslocamentoX,
y = jogador.y - 8 + meuDeslocamentoY
}
local inferiorDireito = {
x = jogador.x + 7 + meuDeslocamentoX,
y = jogador.y + 7 + meuDeslocamentoY
}
local inferiorEsquerdo = {
x = jogador.x - 8 + meuDeslocamentoX,
y = jogador.y + 7 + meuDeslocamentoY
}
if not (temColisaoComMapa(superiorEsquerdo) or
temColisaoComMapa(superiorDireito) or
temColisaoComMapa(inferiorEsquerdo) or
temColisaoComMapa(inferiorDireito)) then
jogador.quadroDeAnimacao = jogador.quadroDeAnimacao + Constantes.VELOCIDADE_JOGADOR
if jogador.quadroDeAnimacao >= 3 then
jogador.quadroDeAnimacao = 1
end
jogador.y = jogador.y + meuDeslocamentoY
jogador.x = jogador.x + meuDeslocamentoX
end
end
function atualiza()
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.LARGURA_DA_TELA, -- quanto desenhar x
Constantes.ALTURA_DA_TELA, -- quanto desenhar y
0, --
0)
end
function desenhaJogador()
spr(jogador.sprite,
jogador.x-8,
jogador.y-8,
jogador.corDeFundo,
1, -- escala
0, -- espelhar
0, -- rotacionar
2, -- quantos blocos para direita
2) -- quantos blocos para baixo
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 desenha()
cls()
desenhaMapa()
desenhaJogador()
desenhaObjetos()
end
function fazColisaoDoJogadorComAChave(indice)
jogador.chaves = jogador.chaves + 1
table.remove(objetos,indice)
return false
end
function fazColisaoDoJogadorComAPorta(indice)
if jogador.chaves > 0 then
jogador.chaves = jogador.chaves - 1
table.remove(objetos,indice)
print(2222)
return false
end
print(3333,0,8)
return true
end
function verificaColisaoComObjetos()
for indice, objeto in pairs(objetos) do
if temColisao(jogador, 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 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 TIC()
atualiza()
desenha()
end
function criaPorta(coluna, linha)
local porta = {
sprite = Constantes.SPRITE_PORTA,
x = coluna * 8 + 8,
y = linha * 8 + 8,
corDeFundo = 6
}
return porta
end
function criaChave(coluna, linha)
local chave = {
sprite = Constantes.SPRITE_CHAVE,
x = coluna * 8 + 8,
y = linha * 8 + 8,
corDeFundo = 6
}
return chave
end
function inicializa()
local chave = criaChave(3,3)
table.insert(objetos, chave)
local porta = criaPorta(17,7)
table.insert(objetos, porta)
end
inicializa()