Segui com o prof fez no video mas após fazer as refatorações do código de colisões o jogo carrega normal mas após apertar qualquer tecla para movimentar ele entra na tela de terminal com as seguites mensagens:
[string "-- title: Fuga das Sombras..."]:27: attempt to index a nil value (local 'ponto') stack traceback: [string "-- title: Fuga das Sombras..."]:27: in function 'temColisaoComMapa' [string "-- title: Fuga das Sombras..."]:55: in function 'tentaMoverPara' [string "-- title: Fuga das Sombras..."]:76: in function 'atualiza' [string "-- title: Fuga das Sombras..."]:110: in function 'TIC'
O código esta na seguinte forma:
-- title: Fuga das Sombras
-- author: Renato Arantes
-- desc: RPG de acao 2D
-- script: lua
constantes = {
LARGURA_TELA = 240,
ALTURA_TELA = 138}
mapa = {
posicaoMapaX = 0,
posicaoMapaY = 0,
posicaoX = 0,
posicaoY = 0}
jogador = {
sprite = 32,
posicaoX = 120,
posicaoY = 68,
corFundo = 0,
fatorEscala = 1,
fatorEspelhamento = 0,
fatorRotacao = 0,
tamanhoSprite = 2}
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(deslocamentoX, deslocamentoY)
superiorEsquerdo = {
x = jogador.posicaoX - 8 + deslocamentoX,
y = jogador.posicaoY - 8 + deslocamentoY
}
superiordireito = {
x = jogador.posicaoX + 7 + deslocamentoX,
y = jogador.posicaoY - 8 + deslocamentoY
}
inferiorEsquerdo = {
x = jogador.posicaoX - 8 + deslocamentoX,
y = jogador.posicaoY + 7 + deslocamentoY
}
inferiorDireito = {
x = jogador.posicaoX + 7 + deslocamentoX,
y = jogador.posicaoY + 7 + deslocamentoY
}
if temColisaoComMapa(superiorEsquerdo) or
temColisaoComMapa(superiorDireito) or
temColisaoComMapa(inferiorEsquerdo) or
temColisaoComMapa(inferiorDireito) then
--Tem Colisao!!!
else
jogador.posicaoX = jogador.posicaoX + deslocamentoX
jogador.posicaoY = jogador.posicaoY + deslocamentoY
end
end
function atualiza()
if btn(0) then
tentaMoverPara(0 , -1)
end
if btn(1) then
tentaMoverPara(0 , 1)
end
if btn(2) then
tentaMoverPara(-1 , 0)
end
if btn(3) then
tentaMoverPara(1 , 0)
end
end
function desenhaMapa()
map(
mapa.posicaoMapaX,
mapa.posicaoMapaY,
constantes.LARGURA_TELA,
constantes.ALTURA_TELA,
mapa.posicaoX,
mapa.posicaoY)
end
function desenhaJogador()
spr(
jogador.sprite,
jogador.posicaoX - 8,
jogador.posicaoY - 8,
jogador.corFundo,
jogador.fatorEscala,
jogador.fatorEspelhamento,
jogador.fatorRotacao,
jogador.tamanhoSprite,
jogador.tamanhoSprite)
end
function desenha()
cls()
desenhaMapa()
desenhaJogador()
end
function TIC()
atualiza()
desenha()
end
Pela mensagem eu entendi que o problema esta na variavel "ponto" que colocamos e que nao esta definida mas ela aparece como valor de substituição para as variaveis dos pontos que foram definidas na função tentaMoverPara( ), superiorEsquerda, superiorDIreita, etc. Mas não soube como consertar isso, alguem poderia me ajudar por favor?