1
resposta

Consigo subir e descer, porém quando desço tudo o personagem trava

-- title:  Fuga das Sombras
-- author: Otavio Takahashi
-- desc:   RPG de acao 2d
-- script: lua

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

Constantes = {
    LARGURA_DA_TELA = 240,
 ALTURA_DA_TELA = 138
}

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 atualiza()

    -- cima
    if btn(0) then
     meuDeslocamentoY = -1
     superiorEsquerdo = {
            x = jogador.x - 8,
            y = jogador.y - 8 + meuDeslocamentoY
}
     superiorDireito = {
         x = jogador.x + 7,
            y = jogador.y - 8 + meuDeslocamentoY
}
    meuDeslocamentoY = 1
        inferiorDireito = {
         x = jogador.x + 7,
            y = jogador.y + 7 + meuDeslocamentoY
}
  inferiorEsquerdo = {
         x = jogador.x - 8,
            y = jogador.y + 7 + meuDeslocamentoY
}    

    if temColisaoComMapa(superiorEsquerdo) or
       temColisaoComMapa(superiorDireito) or
                temColisaoComMapa(inferiorEsquerdo) or
                temColisaoComMapa(inferiorDireito) then
    --colisao!!!
    else            
  jogador.y = jogador.y - 1            
 end
end

    -- baixo
    if btn(1) then
        meuDeslocamentoY = 1
        inferiorDireito = {
         x = jogador.x + 7,
            y = jogador.y + 7 + meuDeslocamentoY
}
  inferiorEsquerdo = {
         x = jogador.x - 8,
            y = jogador.y + 7 + meuDeslocamentoY
}
  superiorEsquerdo = {
            x = jogador.x - 8,
            y = jogador.y - 8 + meuDeslocamentoY
}
     superiorDireito = {
         x = jogador.x + 7,
            y = jogador.y - 8 + meuDeslocamentoY
}            

    if temColisaoComMapa(inferiorDireito) or
       temColisaoComMapa(inferiorEsquerdo) or
                temColisaoComMapa(superiorEsquerdo) or
                temColisaoComMapa(superiorDireito) then    
             --colisao
                else
                jogador.y = jogador.y + 1
            end    
        end

    -- esquerda
    if btn(2) then
                jogador.x = jogador.x - 1
        end

    -- direta
        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, -- 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 para direita
               2) -- quantos blocos para baixo
end

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


     print(jogador.y)

end


function TIC()
 atualiza()
 desenha() 

    end
1 resposta

Olá Otávio, peço desculpas pela demora no retorno.

O problema está na criação dos pontos inferiores na ação -- cima, o valor de meuDeslocamentoY deve ser sempre -1 nessa parte, e até começa assim, mas na linha 42 é modificado para 1. Basta remover essa linha 42 com meuDeslocamentoY = 1 que o jogo vai funcionar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software