Pracuję nad moim pierwszym projektem Flash, a dla mojego preloadera chciałbym zrobić naprawdę prosty gradient w oparciu o załadowany procent. Preloader mówi "77% załadowane ...", gdzie numer 77 jest dynamiczną instancją tekstową o nazwie percentLoaded. Chciałbym, aby wartość textColor of percentLoaded zmieniła się na gradiencie z # 000000 na #FFFFFF, w skali szarości.Gradient RGB oparty na procentowym załadowaniu pliku
Dlatego, nie mogę po prostu zrobić:
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
To właśnie konwertuje textColor do wielokrotności FFFFFF, ale wyprowadza kolor, ponieważ jest to nie trzy oddzielne komponenty. Obecnie, oto co mam:
percentLoaded.text=currentValue.toString();
percentLoaded.textColor=rgb2hex((currentValue/100)*255, (currentValue/100)*255, (currentValue/100)*255);
Gdzie „rgb2hex” to funkcja zdefiniowana w klasie jako takie:
public function rgb2hex(r:Number, g:Number, b:Number) {
return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
}
To nie wygląda to rzeczywiście się zmienia kolor czcionka. Zaimportowałem flash.text.TextField i flash.display.MovieClip, ale nie jestem pewien, czy brakuje mi czegoś innego. Czy byłoby to łatwiejsze w przypadku łączenia ciągów? Czy może coś się dzieje z currentValue/100 i przekazujesz to jako numer?
Jeśli ciekawi, znalazłem kod dla rgb2hex here.
Dzięki!
To nie działa. spróbuj ustawić currentValue na 1. Otrzymasz 0x28f5c. musisz rzucić ((currentValue/100) * 0xFF) do int przed pomnożeniem przez 0x010101. – Ponkadoodle
Prawda, zapomniałem o tym, naprawiono; dziękuję za uwagę! W rzeczywistości obsada musi przejść do wyniku podziału, ponieważ właśnie dlatego tak się dzieje - klasa "Number" klasy Flash to klasa IEE. Przesyłanie do uint powinno rozwiązać problem. – LiraNuna
Nie, bieżąca wartość zawiera się między 0-100. Jeśli rzutujesz po podzieleniu, ale przed pomnożeniem przez 0xFF, otrzymasz 0 lub 1. On chce mieć pełną skalę szarości, a nie tylko czarno-białą. A problem nie wynika z niedokładności zmiennoprzecinkowych. To dlatego, że twój format (* 0x010101) to zasadniczo trzy pola (01, 01, 01). Nie spodziewa się, że coś w jednym polu wpłynie na inne pole. Ale użycie wartości większej niż 255, pozwala niskim polom wpływać na wysokie pole, a wartość pomiędzy liczbami całkowitymi pozwala wysokiemu polu wpływać na niższe pole. Wypróbuj 1.5 * 0x010101, aby zobaczyć co mam na myśli. – Ponkadoodle