Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problemas com a colisão para cima... O ponto está sendo considerado um valor inválido... Por favor, me ajudem eu realmente quero aprender a programar...

insira seu código aqui

-- title:  Bean
-- author: Alvaro Luis
-- desc:   Um feijao feliz
-- script: lua

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

LarguraDaTela = 240
AlturaDaTela = 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                                     
else
 --colisao!!!
        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
        LarguraDaTela, -- quanto desenhar X
        AlturaDaTela, -- quanto desenhar Y
           0, -- em qual ponto colocar X
           0) -- em qual ponto colocar Y

                    end

function desenhaJogador()

spr(jogador.sprite,
    jogador.x - 8,
       jogador.y - 8,
             0, -- cor de fundo
             1, -- escala
             0, -- espelhar
             0, -- rotacionar
             2, -- blocos direita
             2) -- blocos esquerda

        end

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

end

function TIC()

 temColisaoComMapa()
 atualiza()
 desenha()

    print(jogador.y)

end

2 respostas
solução!

Olá, seu problema é bem simples na verdade.

A sua função de colisão está certa, ela deve ser chamada sempre passando um ponto e sempre que precisar verificar a colisão, ou seja sempre que o personagem andar.

Sendo assim, o que esta causando o erro no seu código é a chamada da função temColisaoComMapa que não esta passando parâmetro. A chamada que você esta fazendo dentro da function TIC.

Além disso, essa chamada não é necessária já que a verificação só precisa ser feita quando o personagem se movimenta e não a cada Tic.

Resumindo, é só remover a chamada de temColisaoComMapa da function TIC:

function TIC()
    atualiza()
    desenha()
    print(jogador.y)
end

Não desiste da programação não, é sempre mais complicado no começo. Você vai pegando o jeito ;)

Wow Edrei, nem sei como agradecer!!! Você é incrível!!! Muito obrigado mesmo, espero que você tenha um dia fantástico!!! E pode deixar que eu não vou desistir ;) Até mais :D

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