爲什麼下面的代碼繪製矩形完全透明?爲什麼填充0xFFFFFFFF是透明的?
graphics.beginFill(0xFFFFFFFF);
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
我知道的beginFill需要帶alpha的說法,即爲0xRRGGBB,但具有α作品比全白以外的任何顏色。例如,它適用於0xFFFFFFFE。 對於全白,你必須與0x00FFFFFF到處都是煩人的。
是否有這種行爲的邏輯原因?
爲什麼下面的代碼繪製矩形完全透明?爲什麼填充0xFFFFFFFF是透明的?
graphics.beginFill(0xFFFFFFFF);
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
我知道的beginFill需要帶alpha的說法,即爲0xRRGGBB,但具有α作品比全白以外的任何顏色。例如,它適用於0xFFFFFFFE。 對於全白,你必須與0x00FFFFFF到處都是煩人的。
是否有這種行爲的邏輯原因?
如果輸入值預計爲0x00RRGGBB,那麼傳遞值> = 0x01000000僅僅是無效輸入。如果有人通過透明常量值,可能會被黑入代碼中以跳過填充。
在Flex中,此值被定義爲StyleManager.NOT_A_COLOR。由於Stylemanager在Flash中不可用,所以大概有人已經複製了這個想法,但沒有放置顏色的地方(或Flex團隊正式確定了它)。拿心,這個價值無處不在:) –
使用0xAARRGGBB格式不會「* work *」,除非用「* work *」表示「alpha被忽略」。如果這真的會殺死你,那麼就讓一個靜態幫助器爲你做這件事吧:'function(g:Graphics,c:uint):void {g.beginFill(c&0xFFFFFF,(c >> 24)/ 255); };'。至於*爲什麼*我認爲@盧塞羅的答案可能是最好的你會得到。 –
@ 32bitkid是的,這就是我的意思。 alpha被忽略。就我而言,所有的顏色值都是完整的alpha值,所以我一開始並沒有注意到。我仍然認爲這是一個奇怪的不一致。至少現在,如果其他人有這個問題,谷歌就會遇到這個問題。 – Danik