gpt4 book ai didi

actionscript-3 - AS3 - 为什么将 DisplayObject 的 alpha 设置为 0.7 实际上会导致 alpha 被设置为 0.69921875?

转载 作者:行者123 更新时间:2023-12-01 08:11:31 25 4
gpt4 key购买 nike

在我的代码中,我曾将 Sprite 的 alpha 设置为 0.7

square.alpha = 0.7;

在我的代码的后面,我在条件语句中检查这个 alpha。

if (square.alpha == 0.7) {//做一些事情

在我执行 trace(square.alpha); 而不是 0.7 我得到 0.69921875< 之前,我一直在摸不着头脑为什么它不起作用.

这个数字 (0.69921875) 对于我设置为 alpha 为 0.7 的 Sprite 的每个实例都是相同的。

我做了一些测试,看起来返回与我设置的值完全相同的 alpha 的唯一值是 00.51。其他任何东西似乎总是返回一个非常接近我设置的数字,但不完全是。例如 0.2 会给我 0.19921875

为什么会这样?

我用的是Flex编译代码,不知道有没有影响。

最佳答案

Alpha 在引擎盖下存储为 8 位 channel 。数字是由于float -> 8-bit 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

这不像其他人所建议的那样是由于 float 的限制。

0、0.5 和 1 正确工作的原因是这些小数在转换为 8 位 int 时不进行任何舍入。

例如:

256 * 0.5 = 128 (no rounding necessary)
128 / 256 = 0.5

如果您想变通,可以将 alpha 设置为 256 的小数,并根据相同的小数进行检查:

square.alpha = 179 / 256;

if (square.alpha == 179 / 256) {/*do stuff*/}

关于actionscript-3 - AS3 - 为什么将 DisplayObject 的 alpha 设置为 0.7 实际上会导致 alpha 被设置为 0.69921875?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com