Я работаю над своим первым проектом Flash, и для моего предварительного загрузчика я хотел бы сделать действительно простой градиент на основе загруженного процента. Предварительный загрузчик говорит "77%, загруженных...", где номер 77 является экземпляром динамического текста, названным percentLoaded. Я хотел бы, чтобы цвет текста percentLoaded изменился на градиенте от № 000000 до #FFFFFF в шкале полутонов.
Поэтому я не могу просто сделать:
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
Это просто преобразовывает цвет текста в несколько FFFFFF, но производит цвет, так как это не три отдельных компонента. В настоящее время вот то, что я имею:
percentLoaded.text=currentValue.toString();
percentLoaded.textColor=rgb2hex((currentValue/100)*255, (currentValue/100)*255, (currentValue/100)*255);
Где "rgb2hex" является функцией, определяемой в классе как таковом:
public function rgb2hex(r:Number, g:Number, b:Number) {
return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
}
Не похоже, что это на самом деле изменяет цвет шрифта все же. Я импортировал flash.text. TextField и flash.display. MovieClip, но не уверено, пропускаю ли я что-то еще. Это было бы легче сделать с конкатенацией строк? Или есть ли, возможно, что-то продолжающее currentValue/100 и передающий что как Число?
Если любопытный, я нашел код для rgb2hex здесь.
Спасибо!
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
Это близко.
Чтобы получить серого, вы действительно должны иметь каждый компонент, но это все еще можно сделать подобным способом вашего:
percentLoaded.textColor = uint((currentValue / 100) * 0xFF) * 0x010101;
Вам повезло, я случайно проделал это совсем недавно в проекте только с разными цветами. Вот функция, которая вернет цветное значение между двумя другими цветами, основанным на диапазоне 0-1. Я думаю, что код довольно явно объяснил, но дайте мне знать, если вы столкнулись с любыми проблемами.
private function getBetweenColourByPercent(value:Number = 0.5 /* 0-1 */, highColor:uint = 0xFFFFFF, lowColor:uint = 0x000000):uint {
var r:uint = highColor >> 16;
var g:uint = highColor >> 8 & 0xFF;
var b:uint = highColor & 0xFF;
r += ((lowColor >> 16) - r) * value;
g += ((lowColor >> 8 & 0xFF) - g) * value;
b += ((lowColor & 0xFF) - b) * value;
return (r << 16 | g << 8 | b);
}
Тайлер.
percentLoaded.textColor = int((currentValue / 100) * 0xFF) * 0x010101;
Отливное int до умножения на 0x010101 является обязательным. 8-битные значения цвета могут быть только целые числа между 0-255. Если это не в этих пределах, умножение на 0x010101 может привести к переполнению числа из одного цветного компонента (RR, GG, BB) к другому (B-> G, G-> R). Но они также могут нести другого способа, если не целое число (R-> G, G-> B). Я предполагал, что quoteValue - это любой номер от 0 до 100.
Рассмотрим это, с каждой цифрой это собственная цветная компонент (в десятичности):
5.0 * 111 = 555 = 5R, 5G, 5B
5.5 * 111 = 610.5 = 6R, 1G, 0.5B
Если это работает для вас
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
, то вы могли бы просто сделать
var percent = currentValue / 100;
percentLoaded.textColor = Math.floor(percent*0xFF) * 0x010101;