Olá a todos, estou com um problema que aparentemente é algo simples, o personagem do jogo fuga das sombras quando passa à esquerda na direção da chave em qualquer altura pega ela, porém vi e revi o código com base nos das aulas, tem uma alteração ou outra apenas, mas coisas de sintaxe apenas, porém nao consegui encontrar o erro, estarei deixando todo o codigo no rodapé do topico e logo a baixo a parte que imagino que seja mais provável que esteja o erro, se for possível me ajudar valeu
código onde verifica se existe colisão com jogador e chave :
function temcolisaojoga(objetoA,objetoB)
local esquerdoB = objetoB.x -8
local direitoB = objetoB.x + 7
local baixoB = objetoB.y +7
local cimaB = objetoB.y -8
local esquerdoA = objetoA.x -8
local direitoA = objetoA.x +7
local baixoA = objetoB.y +7
local cimaA = objetoB.y -8
if esquerdoB > direitoA or
direitoB < esquerdoA or
baixoA < cimaB or
cimaA > baixoB then
return false
end
return true
end
function fazcolisaojo(indice)
table.remove(objetos, indice)
end
function colisaoobj()
for indice, objeto in pairs(objetos)do
if temcolisaojoga(jogador, objeto) then
fazcolisaojo(indice)
end
end
end
codigo completo do jogo
jogador = {
sprite = 256,
x = 120,
y = 68,
cordefundo = 6,
quadrodeanimacao = 1
}
objetos = {
}
largura = 240
altura = 138
function desenhamapa()
map(0, -- posicao x no mapa
0, -- posicao y no mapa
largura, -- tamanho x
altura, -- tamanho y
0,
0)
end
function temcolisao(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)
meudeslocamentox = delta.deltax
meudeslocamentoy = delta.deltay
superioresquerdo = {
x = jogador.x - 8 + meudeslocamentox,
y = jogador.y -8 + meudeslocamentoy
}
superiordireito = {
x = jogador.x + 7+ meudeslocamentox,
y = jogador.y - 8 + meudeslocamentoy
}
inferiordireito = {
x = jogador.x + 7 + meudeslocamentox,
y = jogador.y +7 + meudeslocamentoy
}
inferioresquerdo = {
x = jogador.x - 8+ meudeslocamentox,
y = jogador.y + 7 + meudeslocamentoy
}
if temcolisao(superioresquerdo) or
temcolisao(superiordireito) or
temcolisao(inferioresquerdo) or
temcolisao(inferiordireito) then
else
jogador.quadrodeanimacao= jogador.quadrodeanimacao + 0.1
if (jogador.quadrodeanimacao >= 3 )then
jogador.quadrodeanimacao = 1
end
jogador.y = jogador.y + meudeslocamentoy
jogador.x = jogador.x + meudeslocamentox
end
end
function atualiza()
direcao = {
{deltax = 0 ,deltay =-1},
{deltax = 0 ,deltay = 1},
{deltax =-1 ,deltay = 0},
{deltax = 1 ,deltay = 0}
}
animacaojogador = {
{256,258},
{260,262},
{264,266},
{268,270}
}
for tecla = 0,3 do
if btn(tecla)then
quadros = animacaojogador[tecla+1]
jogador.sprite =quadros[math.floor(jogador.quadrodeanimacao)]
tentamoverpara(direcao[tecla+1])
end
end
end
function desenhajogador()
spr(jogador.sprite,
jogador.x - 8,
jogador.y -8,
jogador.cordefundo, -- fundo
1, -- escala
0, -- espelhar
0, -- rotacionar
2, -- blocos a direita
2) -- blocos a 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 temcolisaojoga(objetoA,objetoB)
local esquerdoB = objetoB.x -8
local direitoB = objetoB.x + 7
local baixoB = objetoB.y +7
local cimaB = objetoB.y -8
local esquerdoA = objetoA.x -8
local direitoA = objetoA.x +7
local baixoA = objetoB.y +7
local cimaA = objetoB.y -8
if esquerdoB > direitoA or
direitoB < esquerdoA or
baixoA < cimaB or
cimaA > baixoB then
return false
end
return true
end
function fazcolisaojo(indice)
table.remove(objetos, indice)
end
function colisaoobj()
for indice, objeto in pairs(objetos)do
if temcolisaojoga(jogador, objeto) then
fazcolisaojo(indice)
end
end
end
function TIC()
atualiza()
colisaoobj()
desenha()
end
function criachave(col,lin)
local chave = {
sprite =364 ,
x = col*8,
y = lin*8,
cordefundo = 6
}
return chave
end
function inicializa()
local chave = criachave(3,5)
table.insert(objetos,chave)
end
inicializa()