好的,我有一个想要淡入淡出的控件(持续).为了淡化它,我在绘图程序中调整控件的透明度值.所以我设置了一个运行的计时器,我调整了m_transparency成员.计时器运行,它应该在两个定义的值m_start,m_end之间来回扫描.这些可以是0-255.
例如.开始30,结束55,增量值= 5.它看起来像:
30,35,40,45,55,50,45,40,35,30,35,40 .......
也应该处理开始55,结束30.
无论如何,我写了一个可怕的功能,基本上测试每个条件(我上下移动,我到达开始,结束,转身点等).它很难看,我很尴尬(三重嵌套ifs),但我无法想出一个更干净的方法,然后测试一切.有没有更简单的方法?
以下课程相当简单.你需要考虑你希望它在边界情况下的行为(例如,这将为RangeScanner(30,54,5)发出55,但很容易将其更改为你想要的行为).
class RangeScanner
{
public:
RangeScanner(int start, int end, unsigned int inc) :
value(start),
lower(std::min(start, end)),
upper(std::max(start, end)),
increment(inc),
incrementing(start < end)
{
}
int nextValue()
{
int ret = value;
value += incrementing ? increment : -increment;
if (value >= upper || value <= lower)
{
incrementing = !incrementing;
}
return ret;
}
private:
int value;
const int lower;
const int upper;
const unsigned int increment;
bool incrementing;
};
| 归档时间: |
|
| 查看次数: |
2414 次 |
| 最近记录: |