【发布时间】:2010-11-01 23:47:43
【问题描述】:
我正在尝试通过手动更改表单的不透明度来为我的表单添加淡入淡出效果,但我在计算要按表单的不透明度值递增的正确值时遇到了一些问题。
我知道我可以使用 AnimateWindow API,但它显示了一些意外行为,我宁愿手动执行它以避免任何 p/invoke,以便稍后在 Mono 中使用它。
我的应用程序支持从 1 到 10 的速度。我手动计算出,对于 1(最慢)的速度,我应该将不透明度增加 0.005,对于 10(最快)的速度,我应该增加 0.1。至于 1 到 10 之间的速度,我用下面的表达式来计算正确的值:
double opSpeed = (((0.1 - 0.005) * (10 - X)) / (1 - 10)) + 0.1; // X = [1, 10]
虽然这可以给我一个线性值,但那没关系。但是,对于 X 等于 4 及以上,它已经太快了。超过它应该的。我的意思是,速度在 7 和 10 之间,我几乎看不出有什么区别,并且这些值的动画速度应该间隔更大一些
请注意,我仍然希望最快的增量为 0.1,最慢的增量为 0.005。但我需要所有其他人在它们之间保持线性。
我做错了什么?
实际上它为什么这样工作是有道理的,例如,对于增量之间的固定间隔,比如几毫秒,并且根据上面的等式,如果 X = 10,那么 opSpeed = 0.1,如果 X = 5,那么运算速度 = 0.47。如果我们考虑一下,0.1 的值将循环 10 次,而 0.47 的值将只循环双倍。对于只有几毫秒的如此小的间隔,这些值之间的差异并不像区分 5 到 10 的速度那么大。
【问题讨论】:
标签: performance function animation math