2
respostas

personagem pega a chave de longe

Olá a todos, estou com um problema que aparentemente é algo simples, o personagem do jogo fuga das sombras quando passa à esquerda na direção da chave em qualquer altura pega ela, porém vi e revi o código com base nos das aulas, tem uma alteração ou outra apenas, mas coisas de sintaxe apenas, porém nao consegui encontrar o erro, estarei deixando todo o codigo no rodapé do topico e logo a baixo a parte que imagino que seja mais provável que esteja o erro, se for possível me ajudar valeu

código onde verifica se existe colisão com jogador e chave :

function temcolisaojoga(objetoA,objetoB)

        local esquerdoB = objetoB.x -8
        local direitoB = objetoB.x + 7
        local baixoB = objetoB.y +7
        local cimaB = objetoB.y -8

        local esquerdoA = objetoA.x -8
        local direitoA = objetoA.x +7
        local baixoA = objetoB.y +7
        local cimaA = objetoB.y -8

    if esquerdoB > direitoA or
       direitoB < esquerdoA or
       baixoA < cimaB or
       cimaA > baixoB then
                    return false
        end
        return true
end

function fazcolisaojo(indice)
        table.remove(objetos, indice)
end

function colisaoobj()
        for indice, objeto in pairs(objetos)do
                if temcolisaojoga(jogador, objeto) then
                        fazcolisaojo(indice)
                end
        end
end

codigo completo do jogo


jogador = {
 sprite = 256,
 x = 120,
    y = 68,
    cordefundo = 6,
    quadrodeanimacao = 1
}
objetos = {

}
largura = 240
altura = 138
function desenhamapa()
        map(0, -- posicao x no mapa
                        0, -- posicao y no mapa
                     largura, -- tamanho x
                        altura, -- tamanho y
                        0,
                        0)
end
function temcolisao(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 tentamoverpara(delta)
            meudeslocamentox = delta.deltax
            meudeslocamentoy = delta.deltay

            superioresquerdo = {
                    x = jogador.x - 8 + meudeslocamentox,
                    y = jogador.y -8 + meudeslocamentoy
            }
            superiordireito = {
              x = jogador.x + 7+ meudeslocamentox,
                    y = jogador.y - 8 + meudeslocamentoy
            }
            inferiordireito = {
                    x = jogador.x + 7 + meudeslocamentox,
                    y = jogador.y +7 + meudeslocamentoy
            }
            inferioresquerdo = {
                    x = jogador.x - 8+ meudeslocamentox,
                    y = jogador.y + 7 + meudeslocamentoy
            }
            if temcolisao(superioresquerdo) or
                        temcolisao(superiordireito)     or
                        temcolisao(inferioresquerdo) or
                        temcolisao(inferiordireito)     then

            else

            jogador.quadrodeanimacao= jogador.quadrodeanimacao + 0.1
            if (jogador.quadrodeanimacao >= 3  )then
                    jogador.quadrodeanimacao = 1
            end
                    jogador.y = jogador.y + meudeslocamentoy
                    jogador.x = jogador.x + meudeslocamentox
            end
end

function atualiza()
        direcao = {
         {deltax = 0 ,deltay =-1},
            {deltax = 0 ,deltay = 1},
            {deltax =-1 ,deltay = 0},
            {deltax = 1 ,deltay = 0}
        }
        animacaojogador = {
        {256,258},
        {260,262},
        {264,266},
        {268,270}
        }

        for tecla = 0,3 do
                if btn(tecla)then
                        quadros = animacaojogador[tecla+1]
                        jogador.sprite =quadros[math.floor(jogador.quadrodeanimacao)]

                        tentamoverpara(direcao[tecla+1])

                end 
        end
end

function desenhajogador()
        spr(jogador.sprite,
                     jogador.x  - 8,
                     jogador.y -8,
                         jogador.cordefundo, -- fundo
                         1, -- escala
                         0, -- espelhar
                         0, -- rotacionar
                         2, -- blocos a direita
                         2) -- blocos a baixo
end

function desenhaobjetos()
        for indice,objeto in pairs(objetos) do
                    spr(objeto.sprite,
                    objeto.x-8,
                    objeto.y-8,
                    objeto.cordefundo,
                    1,
                    0,
                    0,
                    2,
                    2)
        end
end
function desenha()
        cls()
        desenhamapa()
        desenhajogador()
        desenhaobjetos()
end

function temcolisaojoga(objetoA,objetoB)

        local esquerdoB = objetoB.x -8
        local direitoB = objetoB.x + 7
        local baixoB = objetoB.y +7
        local cimaB = objetoB.y -8

        local esquerdoA = objetoA.x -8
        local direitoA = objetoA.x +7
        local baixoA = objetoB.y +7
        local cimaA = objetoB.y -8

    if esquerdoB > direitoA or
       direitoB < esquerdoA or
       baixoA < cimaB or
       cimaA > baixoB then
                    return false
        end
        return true
end

function fazcolisaojo(indice)
        table.remove(objetos, indice)
end

function colisaoobj()
        for indice, objeto in pairs(objetos)do
                if temcolisaojoga(jogador, objeto) then
                        fazcolisaojo(indice)
                end
        end
end
function TIC()
        atualiza()
        colisaoobj()
        desenha()

end

function criachave(col,lin)
        local chave = {
        sprite =364 , 
        x = col*8,
        y = lin*8,
        cordefundo = 6
        }
        return chave
end

function inicializa()
    local     chave = criachave(3,5)
        table.insert(objetos,chave)
end

inicializa()
2 respostas

Ahh caso ninguém consiga encontrar, se tiver um codigo um pouco mais avançado para que eu consiga comparar, muito obrigado

O post foi fechado por inatividade. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!