1
resposta

Problema com meteoros

LARGURA_TELA = 320
ALTURA_TELA = 480
MAX_METEOROS = 12

aviao_p966 = {
    src = "imagens/p966.png",
    largura = 64,
    altura = 64,
    x = LARGURA_TELA/2 - 64/2,
    y = ALTURA_TELA - 64/2

}

meteoros = {}


function removeMeteoros()
    for i = #meteoros, 1, -1 do
        if meteoros[i].y > ALTURA_TELA then
            table.remove(meteoros, i)
        end
    end

end

function criaMeteoro()
    meteoro = {
        x = math.random(LARGURA_TELA),
        y = 0
    }
    table.insert(meteoros, meteoro)

end    


function moveMeteoros()
    for k, v in pairs(meteoros) do
        meteoro.y = meteoro.y + 1 
    end
end

function movep966 ()
    if love.keyboard.isDown('w') then
        aviao_p966.y = aviao_p966.y -1
end
    if love.keyboard.isDown('s') then
        aviao_p966.y = aviao_p966.y +1
end
    if love.keyboard.isDown('a') then
        aviao_p966.x = aviao_p966.x -1
end
    if love.keyboard.isDown('d') then
        aviao_p966.x = aviao_p966.x +1
    end
end

function love.load()
    love.window.setMode(LARGURA_TELA, ALTURA_TELA, {resizable = false})
    love.window.setTitle("P966-Lazer vs Meteors")

    background = love.graphics.newImage("imagens/background.png")
    aviao_p966.imagem = love.graphics.newImage(aviao_p966.src)
    meteoro_img = love.graphics.newImage("imagens/meteoro.png")

end

function love.update(dt)
    if love.keyboard.isDown('w', 'a', 's', 'd') then
        movep966()
    end

    removeMeteoros()
    if #meteoros < MAX_METEOROS then 
         criaMeteoro()
    end
    moveMeteoros()

end

function love.draw()
    love.graphics.draw(background, 0,0)
    love.graphics.draw(aviao_p966.imagem, aviao_p966.x,aviao_p966.y)

    for k,meteoro in pairs(meteoros) do
        love.graphics.draw(meteoro_img, meteoro.x, meteoro.y )
    end

end

Att : Só está caindo um meteoro por vez, alguém consegue me ajudar no que eu errei ?

1 resposta

há um erro na sua iteração para criar meteoros

function moveMeteoros()
    for k, v in pairs(meteoros) do
        meteoro.y = meteoro.y + 1 
    end
end

Você chama for k, v, ou seja, para cada objeto V na posição K, faça .... Mas você programa a função usando meteoro.y. Você deveria ter escrito

function moveMeteoros()
    for k, v in pairs(meteoros) do
        v.y = v.y + 1 
    end
end

ou

function moveMeteoros()
    for k, meteoro in pairs(meteoros) do
        meteoro.y = meteoro.y + 1 
    end
end

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