![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 36
|
Добрый день.
У объекта есть свойство типа Number, задается динамично, диапазон значений от 0 до 2000. В зависимости от этого свойства должен задаваться цвет объекта, т.е. например 0 это красный до 1000 переходит в желтый потом из желтого до 2000 переход в зеленый. Как задать объекту цвет если допустим значение свойства равно 756 или 1567. Подскажите пожалуйста как такое реализовать. Можно ссылку где почитать. Никогда не работал с цветом в подобном контексте. Спасибо! |
|
|||||
|
формируйте 0xFF0000 если у вас 0.
определите сдвиг относительно вашей еденицы. ничего сложного, просто надо работать с побитовым сдвигом или в шестнадцатиричной сс. |
|
|||||
|
[+1 20.11.11]
Регистрация: May 2011
Адрес: Orenburg
Сообщений: 37
|
Берем цветовой диапазон (например от красного color_min = FF0000 до желтого color_max = FFFF00) переводим для удобства в десятичные числа (uint).
Вычисляем дельту между ними (FFFF00 - FF0000 = FF00). Делим дельту на имеющийся диапазон значений (в нашем случае 2000). Получившаяся величина (color_delta) = изменение цвета при изменении значения на 1. при значении 756 color_updated = color_min + color_delta * 756; Преобразовываем uint обратно в hex и присваиваем обновленный цвет объекту. |
|
|||||
|
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
похоже тут надо интерполировать каждую сост цвета (р г б) по отдельности
чтот типа- function _interpolate(value:Number, valueFrom:Number = 0.0, patternFrom:Number = 0.0, valueTo:Number = 1.0, patternTo:Number = 1.0):Number { if(value <= valueFrom) return patternFrom; if(value >= valueTo) return patternTo; return ( (value - valueFrom) / (valueTo - valueFrom) ) * (patternTo - patternFrom) + patternFrom; } stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); function mouseMoveListener(event:MouseEvent):void { var r:uint = _interpolate(event.stageX, 0, 0xFF, 500, 0x00) var g:uint = _interpolate(event.stageX, 0, 0x00, 500, 0xFF) var color:uint = (r << 16) | (g << 8) | 0x00; graphics.clear(); graphics.beginFill(color); graphics.drawRect(0, 0, 100, 100); } еще есть Adjust Color . Hue Последний раз редактировалось nuToH; 18.11.2011 в 14:14. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 36
|
Всем большое спасибо! Буду пробовать, позже отпишу что получилось.
Ребят а где можно почитать про подобные операции? Первый раз вижу, а хотелось бы понять как это работает. Последний раз редактировалось Dessl; 18.11.2011 в 14:04. |
|
|||||
|
Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 36
|
Сделал через ColorTransform, на мой взгляд самый простой путь, хотя памяти убьет побольше наверное.
Не смог пока осилить побитовый сдвиг, да и время уже поджимает. Еще раз всем большое спасибо! |
|
|||||
/** * Blends smoothly from one color value to another. * * @param fromColor The starting color value, in the 0xRRGGBB or 0xAARRGGBB format. * * @param toColor The ending color value, in the 0xRRGGBB or 0xAARRGGBB format. * * @param progress The percent of the transition as a decimal, * where <code>0</code> is the start and <code>1</code> is the end. * * @return The interpolated color value, in the 0xRRGGBB or 0xAARRGGBB format. */ public static function interpolateColor(fromColor:uint, toColor:uint, progress:Number):uint{ var q:Number = 1-progress; var fromA:uint = (fromColor >> 24) & 0xFF; var fromR:uint = (fromColor >> 16) & 0xFF; var fromG:uint = (fromColor >> 8) & 0xFF; var fromB:uint = fromColor & 0xFF; var toA:uint = (toColor >> 24) & 0xFF; var toR:uint = (toColor >> 16) & 0xFF; var toG:uint = (toColor >> 8) & 0xFF; var toB:uint = toColor & 0xFF; var resultA:uint = fromA*q + toA*progress; var resultR:uint = fromR*q + toR*progress; var resultG:uint = fromG*q + toG*progress; var resultB:uint = fromB*q + toB*progress; var resultColor:uint = resultA << 24 | resultR << 16 | resultG << 8 | resultB; return resultColor; } в вашем случае эту функцию следует применять так:
__________________
Хороший отдых - половина работы. Последний раз редактировалось artcraft; 21.11.2011 в 17:58. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 36
|
To artcraft Спасибо огромное... как раз то что нужно.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 14:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|