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

estou com um erro e nao consigo achar ele

-- title:  fuga das sombras
-- author: jefersson
-- desc:   RPG em 2D
-- script: lua

jogador = {
    sprite = 260,
    x = 120,
    y = 68,
    cordefundo = 6,
    quadro = 1
}

constantes = {
    largura_tela = 240,
    altura_tela = 138,
    velocidade_sprites_player = 0.1
}

objetos = {

}

function tentamover(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 not (temcolisaocommapa(inferioresquerdo) or
           temcolisaocommapa(inferiordireito) or
           temcolisaocommapa(superioresquerdo) or
     temcolisaocommapa(superiordireito)) then

                    jogador.quadro = jogador.quadro + constantes.velocidade_sprites_player    
      if jogador.quadro >= 3 then
                        jogador.quadro = 1
            end
             jogador.y = jogador.y + meudeslocamentoy
          jogador.x = jogador.x + meudeslocamentox
        end
end

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

    direcao = {
     {deltax = 0, deltay = -1},
        {deltax = 0, deltay = 1},
        {deltax = -1, deltay = 0},
        {deltax = 1, deltay = 0}
    }


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

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

            tentamover(direcao[tecla + 1])
        end
    end
end

function desenhaplayer()

    spr(jogador.sprite,
    jogador.x - 8,
    jogador.y - 8,
 jogador.cordefundo,
    1, -- escala
    0, -- espelhar
    0,    -- rotacionar
    2,    -- quantos blocos para direita
    2)    -- quantos blocos para baixo

end

function desenhamap()

    map(0, -- posicao x no mapa
                    0, -- posicao y no mapa
                    constantes.largura_tela,    -- quanto desenhar x
                    constantes.altura_tela,    -- quanto desenhar y
                    0, -- em qual ponto colocar o x inicial
                    0) -- em qual ponto colocar o y inicial

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 colisaojogadorchave(indice)
    table.remove(objetos, indice)
end

function temcolisaocomobjetos(objeto1, objeto2)
    local esquerdade1 = objeto1.x - 8
    local direitade1 = objeto1.x + 7
    local baixode1 = objeto1.y + 7
    local cimade1 = objeto1.y - 8

    local direitade2 =    objeto2.x + 7
    local esquerdade2 = objeto2.x - 8
    local baixode2 = objeto2.y + 7
    local cimade2 = objeto2.y - 8

    if esquerdade2 > direitade1 or
                direitade2 < esquerdade1 or
                baixode1 < cimade2 or
                cimade1 > baixode2 then
        return false
    end
    return true
end

function    verificacolisaoobjeto ()
    for indice, objeto in pairs(objetos) do
        if temcolisaocomobjetos(jogador, indice) then
            colisaojogadorchave(indice)
        end
    end
end

function desenha()
    cls()
    desenhamap()
    desenhaplayer()
                desenhaobjetos()
end

function TIC()    
    atualiza()
    verificacolisaoobjeto()
    desenha()
end

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

function inicializa()
    local chave = criachave(25, 8)
    table.insert(objetos, chave)
end

inicializa()
1 resposta
solução!

Oi Daniel!

Dei uma olhada no seu código e me parece que o erro está acontecendo nessa função abaixo:

function    verificacolisaoobjeto ()
    for indice, objeto in pairs(objetos) do
        if temcolisaocomobjetos(jogador, indice) then
            colisaojogadorchave(indice)
        end
    end
end

Na linha onde a função temcolisaocomobjetos é chamada, os parâmetros que são passados são: jogador que é um objeto representando o jogador e indice que o número da posição onde o objeto está guardado na lista objetos. Acontece que a a função temcolisaocomobjetos precisa receber dois objetos justamente pra verificar se eles estão colidindo. Então ao invés de passar o indice como segundo parâmetro, você deve passar o objeto.

Faz um teste e depois avisa a gente se funcionou. Bons estudos!