Gar*_*ong 2 apache-flex actionscript-3
在我的代码中的某一点,我将Sprite的alpha设置为0.7
square.alpha = 0.7;
稍后在我的代码中,我在条件语句中检查这个alpha.
if (square.alpha == 0.7) {//do stuff}
我一直在摸不着为什么直到我做了一次trace(square.alpha);而没有工作,而不是0.7我得到了0.69921875.
0.69921875对于我设置为alpha为0.7的精灵的每个实例,这个数字()是相同的.
我做了一些测试,它看起来像唯一值alpha只返回相同的值,我将它们设置为0,0.5和1.其他任何东西似乎总是返回一个非常接近我设定的数字,但不完全.比如0.2会给我0.19921875
为什么会这样?
我使用Flex编译代码,不确定这是否对此有任何影响.
Alpha存储为引擎盖下的8位通道.这个数字是由于float - > 8位int - > float转换引起的.
这是数学:
256 * 0.7 = 179 (179.2 rounded) // converting from float to 8bit int
179 / 256 = 0.69921875 // converting from int back to float
Run Code Online (Sandbox Code Playgroud)
这不是由于其他人建议的浮点数限制.
0,0.5和1正确工作的原因是这些是在转换为8位int时不经历任何舍入的分数.
例如:
256 * 0.5 = 128 (no rounding necessary)
128 / 256 = 0.5
Run Code Online (Sandbox Code Playgroud)
如果你想要一个解决方法,你可以将你的alpha设置为256分,并检查相同的分数:
square.alpha = 179 / 256;
if (square.alpha == 179 / 256) {/*do stuff*/}
Run Code Online (Sandbox Code Playgroud)