如何调整子对象大小而不拉伸?

我想调整子对象的大小以适应窗口大小。但是当我调整窗口大小时,子对象会被拉伸。如何计算正确的大小和位置以避免对象被拉伸?

我的示例代码:

local objects = {
    {x = g_x + 0, y = g_y, w = 50, h = 50},
    {x = g_x + 55, y = g_y, w = 50, h = 50},
    {x = g_x + 110, y = g_y, w = 50, h = 50},
    {x = g_x + 165, y = g_y, w = 50, h = 50},
    {x = g_x + 220, y = g_y, w = 50, h = 50}
}

function love.load()
    love.window.setMode(800, 600, {resizable=true, vsync=false, minwidth=400, minheight=300})
    local n = {x = love.graphics.getWidth() / 2 - 25,y = love.graphics.getHeight() / 2 - 25,w = 50,h = 50}
    table.insert(objects, n)
end

local default_w = love.graphics.getWidth()
local default_h = love.graphics.getHeight()

function love.draw()
    for i = 1, #objects do
        local obj = objects[i]
        love.graphics.setColor(42, 42, 42)
        love.graphics.rectangle("fill", obj.x, obj.y, obj.w, obj.h)
    end
end

function love.resize( new_w, new_h )

    local scale_Width = new_w / default_w
    local scale_Height = new_h / default_h

    for i = 1, #objects do

        local obj = objects[i]

        obj.x = obj.x * scale_Width
        obj.y = obj.y * scale_Height

        obj.w = obj.w * scale_Width
        obj.h = obj.h * scale_Height

    end

    default_w = new_w
    default_h = new_h

end

不改变窗口大小:https://i.imgur.com/zWKNoou.png 我的问题示例:https://i.imgur.com/MIIbkGW.png 我希望实现的效果:https://i.imgur.com/2la4Bye.png - 蓝色矩形是按比例保留其原始形状的。这正是我想实现的,但是在我这种情况下,白色矩形会像第二个截图一样被拉伸。

点赞
用户3342050
用户3342050

我想你想要缩放位置,而不是缩放大小...

所以保留这些:

obj.x = obj.x * scale_Width
obj.y = obj.y * scale_Height

但去掉这些:

obj.w = obj.w * scale_Width
obj.h = obj.h * scale_Height
2020-12-27 14:19:30