Добрый день, уважаемые форумчане. Вот делал свой HUD и столкнулся с некоторым неудобством. Ниже код который писал изначально, думаю Вы легко поймете что он делает.
if armor >= 100 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/100.png")
elseif armor > 89 and armor < 100 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/90.png")
elseif armor > 79 and armor < 90 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/80.png")
elseif armor > 69 and armor < 80 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/70.png")
elseif armor > 59 and armor < 70 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/60.png")
elseif armor > 49 and armor < 60 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/50.png")
elseif armor > 39 and armor < 50 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/40.png")
elseif armor > 29 and armor < 40 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/30.png")
elseif armor > 19 and armor < 30 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/20.png")
elseif armor > 9 and armor < 20 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/10.png")
elseif armor < 10 then
dxDrawImage(sWidth*0.88,55,50,50,"armor/0.png")
end
Думаю все понимают, что это слишком большой код для данной ситуации, особенно если учесть, что таких еще 2(HP,oxygen), то это просто извращение. Поэтому я сократил его до такого:
dxDrawImage(sWidth*0.88,55,50,50,"armor/"..(math.floor(armor/10)*10)..".png")
По сути он должен делать тоже самое, что и выше, но тут возникла небольшая проблема. Когда уровень брони равен 100, картинка отображается корректная (100.png), если броня равно от 91 до 99, то тоже все верно (90.png), но если броня равна 90, то картинка отображается не корректно, вместо 90.png отображается 80.png, хотя судя по расчету все должно быть правильно:
armor=100
a = (math.floor(armor/10)*10)
print (a) --выведет 100
armor=99 -- (или же armor=91)
a = (math.floor(armor/10)*10)
print (a) --выведет 90
armor=90
a = (math.floor(armor/10)*10)
print (a) --выведет 90
Т.е. при условии, что броня равна 90, должна отображаться картинка 90.png, но этого не происходит.
Пробовал использовать и другие варианты. Например, (string.format('%.0f',(armor/10))*10) и (math.ceil(armor/10)*10), но это не помогло, либо я получал неверный номер картинки, либо работало так, как выше с math.floor и даже было такое, что при 94 показывалась картинка 90.png, а при 95 - 100.png.
Собственно это не так критично,погрешность всего в единицу, но меня всю ночь мучал вопрос, что не так в расчетах или же почему она отображается не так, как должна, захотелось разобраться. И так происходит с каждым десятком, кроме 100, тут все правильно отображается.
Жду ваших предложений и критики
p.s. Прощу прощения если в посте много лишнего, но постарался доступно объяснить проблему .