LÖVE/LOVE2D:实现九宫格

我正在尝试为我的love2d项目实现一个库,该库应该能够使用九宫格方法缩放图像。(如果你还没有听说过: _http://radleymarx.com/blog/simple-guide-to-9-patch/_。)我认为在love2d中实现最简单的方法是使用spriteBatches,在其中为应该/不应该缩放的图像部分创建quads。无论如何,我真的无法使它工作。

第一个问题:如何在创建quads之后设置它们的缩放比例?

第二个问题:我希望有必要时重复四边形而不是缩放它们的能力,但我不知道这会如何工作。但这是可选的,首先我想让缩放本身工作。

这是到目前为止的代码:

function sign(x)    --数学函数以标记一个值的符号。
    return x>0 and 1 or x<0 and -1 or 0
end

function convert(image, borderWidth, borderHeight)  --将普通图像转换为生成的带有quads的spritebatch。
    local rW = image:getWidth()     --参考宽度
    local rH = image:getHeight()    --参考高度
    local bW = borderWidth          --边框宽度
    local bH = borderHeight         --边框高度
    local cW = rW - 2 * bW          --内容宽度
    local cH = rH - 2 * bH          --内容高度
    local spriteBatch = love.graphics.newSpriteBatch(image, 9)
    local id = {}
    --使用一些巧妙的计算生成9个quads
    for i = 1, 3 do
        for j = 1, 3 do
            local x = sign(i - 1) * bW + math.floor(i / 3) * cW
            local y = sign(j - 1) * bH + math.floor(j / 3) * cH
            local w = math.abs(i - 2) * bW + math.abs(math.abs(i - 2) - 1) * cW
            local h = math.abs(j - 2) * bH + math.abs(math.abs(j - 2) - 1) * cH
            id[j + (i * 3) - 3] = spriteBatch:add(love.graphics.newQuad(x, y, w, h, rW, rH), x, y)
        end
    end

    --使用应用的缩放绘制spriteBatch
    --[[
        name = spriteBatch对象,
        width = 最终图像的宽度,
        height = 最终图像的高度,
        scale = 用于在缩放和重复四边形之间切换的布尔值
    ]]
    spriteBatch.draw = function(name, width, height, scale)
        --我如何改变已经存在的quads的比例,以达到所需的宽度/高度?
        --(如果需要,我如何让将缩放的四边形重复自身?)
    end
    return spriteBatch
end

我知道我可以使用“patchy”库( https://github.com/excessive/patchy ),但我仍在学习中,我认为自己创建这样一个库更有意义,以习惯spriteBatches并练习一下。

点赞