Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro na Função TIC

Fiz exatamente igual o da aula, até usei as mesmas variáveis. Mas na hora de executar ele dá erro na FUNÇÃO TIC. Só que já revi várias vezes não encontrei nenhum problema. Meu código:


jogador = {
sprite = 260,
x= 120,
y= 68,
corDeFundo = 6,
quadroAnimacao = 1
}

objetos = {

}

Constantes = {
ALTURA_DA_TELA = 240,
LARGURA_DA_TELA= 138,
Velocidade_Jogador = 0.1
}
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 tentaMoverPara(delta)

    superiorEsquerdo = {
        x = jogador.x -8    + delta.deltaX,
        y = jogador.y -8    + delta.deltaY
    }
    superiorDireito = {
        x = jogador.x +7    + delta.deltaX,
        y = jogador.y -8 + delta.deltaY
    }
        inferiorDireito = {
        x = jogador.x + 7 + delta.deltaX,
        y = jogador.y + 7 + delta.deltaY
    }
    inferiorEsquerdo = {
        x = jogador.x -8 + delta.deltaX,
        y = jogador.y +7 + delta.deltaY
    }

if not (temColisaoComMapa(inferiorDireito) or
    temColisaoComMapa(inferiorEsquerdo) or
    temColisaoComMapa(superiorDireito) or    
    temColisaoComMapa(superiorEsquerdo))then
    jogador.quadroAnimacao = jogador.quadroAnimacao + 0.1
    if jogador.quadroAnimacao >= 3 then 
        jogador.quadroAnimacao = 1
    end
    jogador.y = jogador.y + delta.deltaY
    jogador.x = jogador.x + delta.deltaX
end                

end
function atualiza()



    animacaoJogador = {
            {256,258},
            {260,262},
            {264,266},
            {268,270}
    }

        direcao = {
        {deltaX = 0,deltaY = -1},
        {deltaX = 0,deltaY = 1},
        {deltaX = -1,deltaY = 0},
        {deltaX = 1,deltaY = 0}    
    }

    for tecla = 0,3 do
        if btn (tecla) then
            quadros = animacaoJogador[tecla + 1]
            quadro = math.floor(jogador.quadroAnimacao)
            jogador.sprite = quadros[quadro]
            tentaMoverPara(direcao[tecla+1])
        end
    end

    end

function desenhaMapa()
map(0,  --posicao x no mapa
                0,        --posicao y no mapa
            Constantes.ALTURA_DA_TELA, --quanto desenhar x
            Constantes.LARGURA_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,
jogador.corDeFundo,
1, --escala
0, --espelhar
0, --rotacionar
2, --    qntd blocos direita
2) --qntd blocos baixo
end

function desenhaObjetos()
    for indice, objeto in pairs(objetos) do
    spr(objeto.sprite,
        objeto.x,
        objeto.y, 
        objeto,corDeFundo,
        1,
        0,
        0,
        2,
        2)
    end
end
function desenha()
    cls()
    desenhaMapa()
    desenhaJogador()        
    desenhaObjetos()            
    end

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

function temColisao(objetoA, objetoB)

    local esquerdaDeB = objetoB.x - 8
    local direitaDeB = objetoB + 7
    local baixoDeB = objetoB.y + 7
    local cimaDeB = objetoB.y - 8

    local direitaDeA = objetoA.x + 7
    local esquerdaDeA = objetoA - 8
    local baixoDeA = objetoA.y +7
    local cimaDeA = objetoA.y - 8

    if esquerdaDeB > direitaDeA or
        direitaDeB < esquerdaDeA or
        baixoDeA < cimaDeB or
        cimaDeA > baixoDeB then
        return false
    end
    return true
end

function verificaColisaoComObjetos()
    for indice, objeto in pairs(objetos) do
        if temColisao(jogador, objeto) then
            fazColisaoDoJogadorComAChave(indice)
        end
    end
end

function TIC()
    atualiza()
 verificaColisaoComObjetos()
    desenha()
end

function criaChave (coluna,linha)
        local chave = {
        sprite = 364 ,
        x = coluna * 8 ,
        y = linha * 8 ,
        corDeFundo = 6
        }
        return chave
    end

function inicializacao()

        local chave = criaChave(3,3)
        table.insert(objetos,chave)                
    end

inicializacao()
1 resposta
solução!

Jose, qual o erro que aparece para vc na hora de executar o código?

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