1
resposta

problema com colisao

assim eu vou testar a colisao no final da aula o a colisao em cima funciona mais nos blocos do lado o da direita na direita a colisao funciona mais na esquerda nao e no bloco da esquerda a esquerda nao vai e na direita vai eu consegui encontrar nenhum erro vcs podem me ajudar


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.x - 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, -- 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 esquerda

end
function desenha()
cls()
desenhaMapa()
desenhaJogador()
print(jogador.y)





end

function TIC()
atualiza()
desenha()




end

me ajudem por favor

1 resposta

Olá Patricia, Tudo Bem ?

Me chamo André Noro, e irei tentar ajuda la com sua dúvida.

Para que você consiga colidir o seu personagem com o bloco esquerdo , teremos que validar se superiorEsquerdo e inferiorEsquerdo e você poderá fazer o mesmo com personagem para colidir com o bloco direito verificando se o superiorDireito e inferiorDireito estão entrando na parede. Nesse caso, os pontos da direita sempre podem seguir para esquerda. Quando estamos indo para a esquerda, na prática, queremos levantar informações parecidas ao código criado no tentaMoverPara(), como superiorEsquerdo, superiorDireito, inferiorDireito e inferiorEsquerdo da nova posição. Porém, ao nos movermos para esquerda e direita, não teremos meuDeslocamentoY.

Se quiser fique a vontade para dar uma olhada no Curso Lua Parte 1 , Aula 1 - Atividade 11, onde você pode comparar seus códigos com os que foram mostrados no curso.

Desculpe se não conseguir te ajudar muito, ainda estou começando a mexer no fórum e ainda não tenho muita prática com a ferramenta. Mas fico a disposição para ajuda la, e fique a vontade para fazer críticas, ou colocações. Muito Obrigado pelo seu feedback. Abraços .