Градиент RGB на основе процента загруженного файла

Я работаю над своим первым проектом 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 здесь.

Спасибо!

5
задан Rockmaninoff 21 January 2010 в 00:53
поделиться

4 ответа

percentLoaded.textColor=(currentValue/100)*0xFFFFFF;

Это близко.

Чтобы получить серого, вы действительно должны иметь каждый компонент, но это все еще можно сделать подобным способом вашего:

percentLoaded.textColor = uint((currentValue / 100) * 0xFF) * 0x010101;
6
ответ дан 13 December 2019 в 19:27
поделиться

Вам повезло, я случайно проделал это совсем недавно в проекте только с разными цветами. Вот функция, которая вернет цветное значение между двумя другими цветами, основанным на диапазоне 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);
}

Тайлер.

3
ответ дан 13 December 2019 в 19:27
поделиться
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
1
ответ дан 13 December 2019 в 19:27
поделиться

Если это работает для вас

percentLoaded.textColor=(currentValue/100)*0xFFFFFF;

, то вы могли бы просто сделать

var percent = currentValue / 100;
percentLoaded.textColor = Math.floor(percent*0xFF) * 0x010101;
1
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: