组件渲染顺序不同

我遇到的问题与渲染顺序有关。我的俄罗斯方块场地渲染了背景、俄罗斯方块块和网格,它们的渲染顺序不同。我的俄罗斯方块块掉落时有自己的渲染代码。落下的俄罗斯方块块在背景和网格之间绘制。

所以我的问题是,如果组件(即背景、网格、块)的渲染顺序不同,如何正确地渲染实体?我必须以不同的方式组织我的程序,特别是我的俄罗斯方块场地。但是我不知道最好的方法是什么。

https://github.com/MonkeyToiletLadder/Luatris

main.lua 片段

function love.draw()
    love.graphics.clear(0,0,0)
    field:draw()
    if current_tetromino then
        current_tetromino:draw()
    end
    love.graphics.setColor(1,1,1)
    love.graphics.print("score: " .. score, 0, 25 * 21)
end

tetromino.lua 片段

function tetromino:draw()
    local blocksize = self.field.blocksize
    local offset = self.field.position
    local state = tetromino.rotations[self.shape][self.rotation]
    local position = self.position
    love.graphics.setColor(tetromino.colors[self.shape])
    for j in ipairs(state) do
        for i in ipairs(state[j]) do
            if state[j][i] ~= 0 then
                love.graphics.rectangle("fill", offset[1] + (i + position[1] - 2) * blocksize, offset[2] + (j + math.floor(position[2]) - 2) * blocksize, blocksize, blocksize)
            end
        end
    end
end

field.lua 片段

function field:draw()
    local offset = self.position
    for j=1,self.height,1 do
        for i=1,self.width,1 do
            local color = {1,1,1}
            local shape = self[j][i]
            color = tetromino.colors[shape] or color
            love.graphics.setColor(unpack(color))
            love.graphics.rectangle("fill", offset[1] + (i - 1) * self.blocksize, offset[2] + (j - 1) * self.blocksize, self.blocksize, self.blocksize)
            love.graphics.setColor(0,0,0)
            love.graphics.rectangle("line", offset[1] + (i - 1) * self.blocksize, offset[2] + (j - 1) * self.blocksize, self.blocksize, self.blocksize)
        end
    end
end
点赞