eu fiz tudo certo e dei run ai quando eu vou pegar a chave eu nao consigo
-- title: Fuga Das Sombras
-- author: Jeferson Silva
-- desc: RPG de acao 2D
-- script: lua
jogador = {
sprite = 260,
x = 83,
y = 84,
corDeFundo = 6,
quadroDeAnimacao = 1
}
Constantes = {
LARGURA_DA_TELA = 30,
ALTURA_DA_TELA = 17,
VELOCIDADE_ANIMACAO_JOGADOR = 0.1
}
objetos = {}
function temColisaoComMapa(ponto)
blocoX = ponto.x / 8
blocoY = ponto.y / 8
blocoId = mget(blocoX, blocoY)
return blocoId >= 128
end
function tentaMoverPara(delta)
superiorEsquerdo = {
x = jogador.x + 43 + delta.deltaX,
y = jogador.y - 26 + delta.deltaY
}
superiorDireito = {
x = jogador.x + 28 + delta.deltaX,
y = jogador.y - 26 + delta.deltaY
}
inferiorDireito = {
x = jogador.x + 28 + delta.deltaX,
y = jogador.y - 11 + delta.deltaY
}
inferiorEsquerdo = {
x = jogador.x + 43 + delta.deltaX,
y = jogador.y - 11 + delta.deltaY
}
if temColisaoComMapa(superiorEsquerdo) or
temColisaoComMapa(superiorDireito) or
temColisaoComMapa(inferiorDireito) or
temColisaoComMapa(inferiorEsquerdo)then
-- colisao!!!
else
jogador.quadroDeAnimacao = jogador.quadroDeAnimacao + Constantes.VELOCIDADE_ANIMACAO_JOGADOR
if jogador.quadroDeAnimacao >= 3 then
jogador.quadroDeAnimacao = 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.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, -- quantos blocos desenhar x
Constantes.ALTURA_DA_TELA, -- quantos blocos desenhar y
0, -- em qual ponto colocar o x
0) -- em qual ponto colocar o y
end
function desenhajogador()
spr(jogador.sprite,
jogador.x + 28,
jogador.y - 26,
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,
objeto.y,
objeto.corDeFundo,
1,
0,
0,
2,
2)
end
end
function desenha()
cls()
desenhamapa()
desenhajogador()
desenhaObjetos()
end
function fazColisaoDoJogador(indice)
table.remove(objetos, indice)
end
function temColisao(objetoA, objetoB)
local esquerdoaDeB = objetoB.x - 8
local direitaDeB = objetoB.x + 7
local cimaDeB = objetoB.y + 7
local baixoDeB = objetoB.y - 8
local direitaDeA = objetoA.x +7
local esquerdaDeA = objetoA.x - 8
local baixoDeA = objetoA.y + 7
local cimaDeA = objetoA.y - 8
if esquerdoaDeB > 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
fazColisaoDoJogador(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 inicializa()
local chave = criaChave(3,3)
table.insert(objetos, chave)
end
inicializa()