我按如下方式设置进度条:
void CProgressBar::add(int ammount)
{
mProgress += ammount;
}
float CProgressBar::get()
{
float pr = (float)mProgress * 100.0f / (float)mMax;
return pr;
}
现在这就是问题。我正在尝试渲染一个小表面,虽然它没有正确填充它,因为我不能 弄清楚如何正确地扩展价值:
/*
Progress bar box has size of 128x16
|-----------|
|-----------|
*/
float progress = progressBar->get();
float scale = 4.0f; //Here i have it hardcoded although i have to make this generic
progress *= scale;
graphics->color(prgColor);
graphics->renderQd(CRect(x,y,progress,height));
所以我很友好地请求帮助......
答案 0 :(得分:1)
您必须在0%进度的矩形宽度和100%进度的矩形宽度之间进行线性插值。 E.G:
float width_0 = 0.f; // or any other number of pixels
float width_100 = 250.f; // or any other number of pixels
插值的工作原理如下:
float interpolated_width = (width_100 - width_0) * progress + width_0;
重要提示:progress
必须在0到1的范围内!因此,您可能需要先更改CProgressBar::get()
函数或除以100。
现在您可以使用新宽度渲染矩形:
graphics->renderQd(CRect(x,y,interpolated_width,height));
答案 1 :(得分:0)
进度条的宽度为128,进度> get()函数返回介于0和100之间的值,因此,在不知道库详情的情况下,您的比例应为1.28
我认为mMax是完全进步的价值。
对于小小的整理,我会使get()
const而不是使用C风格的演员表。