0
respostas

Falha ao movimentar para cima

Quando o código é executado, entro no jogo e consigo me movimentar para baixo, esquerda e direita normalmente, mas ao tentar ir pra cima, sou jogado de volta ao terminal e a seguinte mensagem de erro aparece:

  • [string "-- title: Fuga das Sombras..."]: 18: attempt to index a nil value (local 'ponto') stack traceback:
  • [string "-- title: Fuga das Sombras..."]:18: in function 'temColisaoComMapa'
  • [string "-- title: Fuga das Sombras..."]: 37: in function 'atualiza'
  • [string "-- title: Fuga das Sombras..."]: 87: in function 'TIC'

segue o código:

-- title:  Fuga das Sombras
-- author: Jeferson Silva
-- desc:   RPG de acao 2d
-- script: lua

jogador = {
  sprite = 32,
  x = 120,
  y = 68
}

Constantes = {
  LARGURA_DA_TELA = 30,
  ALTURA_DA_TELA = 17
}

function temColisaoComMapa(ponto)
  blocoId = mget(ponto.x / 8, ponto.y / 8)
    if blocoId >= 128 then 
      return true
    else
      return false
    end
end

function atualiza()
  -- cima  
  if btn(0) then
    superioresquerdo = {
        x = jogador.x - 8,
        y = jogador.y - 8 - 1
        }
    superiorDireito = {
        x = jogador.x + 8,
        y = jogador.y - 8 - 1
    }  
      if temColisaoComMapa(superiorEsquerdo) or
           temColisaoComMapa(superiorDireito) then
          -- colisao!!
      else
          jogador.y = jogador.y -1
      end
  end
  -- baixo
  if btn(1) then
    jogador.y = jogador.y + 1
  end
  --esquerda
  if btn(2) then
    jogador.x = jogador.x - 1
  end
  --direita
  if btn(3) then
    jogador.x = jogador.x + 1
  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 - 8,
      jogador.y - 8,
      0, -- cor de fundo
      1, -- escala
      0, -- espelhar
      0, -- rotacionar
      2, -- quantos blocos para direita
      2) -- quantos blocos para baixo
end

function desenha()
  cls()
  desenhaMapa()
  desenhaJogador()
end

function TIC()
  atualiza()
  desenha()
end