制作Project Zomboid中的进度条的数学问题

我正在为Project Zomboid制作mod,但是我似乎无法解决一个数学问题,因此我得到的值的范围从0到1,我希望我的进度条从最大宽度开始,然后随着值的增加而下降。

第一个很容易,我可以得到一个在100和0之间的值,那么如何使用从0开始的值呢?

我尝试在谷歌上搜索,但我真的很擅长数学,找不到答案。

function panel:render()
    self:drawRectBorder(30, 30, self:getWidth() - 1, 50, 1.0, 1.0, 1.0, 1.0);
    --print((bt_core.player:getBodyDamage():getOverallBodyHealth() / 100) * self:getWidth());
    self:drawRect(31, 31, (bt_core.player:getBodyDamage():getOverallBodyHealth() / 100) * self:getWidth() - 3, 48, 1, 0, 0, 1);

    self:drawRectBorder(30, 110, self:getWidth() - 1, 50, 1.0, 1.0, 1.0, 1.0);
    print(bt_core.player:getStats():getFatigue());

    if bt_core.player:getStats():getFatigue() == 0 then
        self:drawRect(31, 111, self:getWidth() - 3 , 48, 1, 0, 0, 1);
    else
        self:drawRect(32, 111,bt_core.player:getStats():getFatigue() / (self:getWidth() - 3) , 48, 1, 0, 0, 1);
    end
end

原文链接 https://stackoverflow.com/questions/70818050

点赞
stackoverflow用户17649155
stackoverflow用户17649155

你可以使用 y = 100 - x*100 将0..1范围内的变量转换为 100..0范围内的变量。

2022-01-22 23:47:12
stackoverflow用户2858170
stackoverflow用户2858170

所以你有一个值在0到1之间,你想将它映射到100到0。

将你的值乘以100将给你0到100。 为了将其反转,你从100中减去它。100-0是100,100-100是0...

local newVal = 100 - val * 100

或者

local newVal = 100 * (1-val)
2022-01-23 00:12:08