Minha dúvida consta na parte da colisão do 'jogador' com a 'chave', quando o jogador coleta a chave a mesma some, o problema é que a porta vai junto, e o 'print' me demonstra que o jogador possui '2' chaves. Ao tentar somente passar pela porta não ocorre colisão, normal.
jogador = {
chaves = 0
}
Constantes = {
SPRITE_DA_CHAVE = 364,
SPRITE_DA_PORTA = 366
}
objetos = {}
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
quadro = math.floor(jogador.quadroDeAnimacao)
quadros = animacaoJogador[tecla + 1]
jogador.sprite =quadros[quadro]
tentaMoverPara(Direcao[tecla+1])
end
end
end
function desenhaMapa()
map(0, -- posicao x no mapa
0, -- posicao y " "
Constantes.LARGURA_DA_TELA, -- quanto desenhar x
Constantes.ALTURA_DA_TELA, -- quanto desenhar y
0, -- em qual ponto colocar o x
0) -- em qual ponto colocar o y
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()
print(jogador.chaves)
end
function fazColisaoJogadorComChave(objeto)
jogador.chaves = jogador.chaves + 1
table.remove(objetos, indice)
end
function fazColisaoJogadorComPorta(indice)
if jogador.chaves > 0 then
jogador.chaves = jogador.chaves - 1
table.remove(objetos, indice)
end
end
function verificaColisaoComObjetos()
for indice, objeto in pairs(objetos) do
if temColisao(jogador, objeto) then
if objeto.sprite == Constantes.SPRITE_DA_CHAVE then
fazColisaoJogadorComChave(indice)
elseif objeto.sprite == Constantes.SPRITE_DA_PORTA then
fazColisaoJogadorComPorta(indice)
end
end
end
end
function TIC()
atualiza()
verificaColisaoComObjetos()
desenha()
end
function criaPorta(coluna, linha)
local porta = {
sprite = Constantes.SPRITE_DA_PORTA,
x = coluna * 8 + 8,
y = linha * 8 + 8,
corDeFundo = 6
}
return porta
end
function criaChave(coluna, linha)
local chave = {
sprite = Constantes.SPRITE_DA_CHAVE,
x = coluna * 8 + 8,
y = linha * 8 + 8,
corDeFundo = 6
}
return chave
end
function inicializa()
local chave = criaChave(8, 7)
table.insert(objetos, chave)
local porta = criaPorta(18,7)
table.insert(objetos, porta)
end
inicializa()