![](/img/trans.png)
[英]What does alpha.disabled mean in Spark's ButtonSkin in AS3?
[英]AS3 - Why does setting a DisplayObject's alpha to 0.7 actually results in the alpha being set to 0.69921875?
在我的代碼中的某一點,我將Sprite的alpha設置為0.7
square.alpha = 0.7;
稍后在我的代碼中,我在條件語句中檢查這個alpha。
if (square.alpha == 0.7) {//do stuff}
直到我做了一個trace(square.alpha);
我才開始摸不着頭腦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
這不是由於其他人建議的浮點數限制。
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*/}
這是浮點數的一般限制。 正如你無法在十進制系統中精確表達1/3
( 0.33333333....
等),你不能將(十進制) 0.1
為二進制浮點數( 0.00011001100110011001100110011...
等)。
您可以將十進制0.5
精確表示為二進制浮點數( 0.1
),以及0.25
( 0.01
)和分母中冪為2的其他分數。 這就是為什么你看到0.5
的正確結果,而不是其他人的結果。
這部分Python文檔很好地解釋了它。
這不是關於alpha ...它是關於浮點運算。 計算機存儲浮點數的方式,某些數字往往接近您想要存儲的數字。 您可以在此問題中找到更多詳細信息: 為什么我在ECMAScript / ActionScript 3中看到不精確的浮點結果?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.