1
resposta

responde pfv

sempre que vou iniciar meu jogo, ele roda normalmente mas quando aperto para cima ele sai


o codigo:
 jogador = {
  sprite = 32,
     x = 120,
     y = 68,
    }

constantes = {
     LARGURA_DA_TELA = 240,
     ALTURA_DA_TELA = 138,
}
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 do mapa
               0, --posicao y do mapa
                     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 desenhajogador()
     spr(jogador.sprite,
 jogador.x - 8, 
 jogador.y - 8, 
 0, -- cor de fundo
 1, -- escala
 0, -- espelhar
 0, -- rotacionar
 2, -- quantos blocos pra direita
 2) -- quantos blocos para baixo
    end

    function desenha()
     cls()
        desenhamapa()
     desenhajogador()
        end




function  TIC()
  atualiza()
  desenha()

end
1 resposta

Olá Pietro,

O problema que está ocorrendo é algo bem sútil e realmente é difícil de encontrar. Dá uma conferida nessa linha:

if temColisaoComMapa(superiorEsquerdo) or

E depois nessa aqui que é onde você declara a variável que você passa como parâmetro no código acima:

 superioresquerdo = {
      x = jogador.x - 8,
      y = jogador.y - 8 - 1
  }

A linguagem Lua é case-sensitive , isto é, os nomes de funções e variáveis levam em conta maiúsculas e minúsculas. No caso dos códigos acima, a varíavel foi declarada como superioresquerdo mas ela é utilizada como superiorEsquerdo (repara no E maiúsculo) quando você chama a função temColisaoComMapa.

Basta corrigir essa pequena diferença e seu código passará a funcionar.

Bons estudos!