Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.11.2011, 10:54
Dessl вне форума Посмотреть профиль Отправить личное сообщение для Dessl Найти все сообщения от Dessl
  № 1  
Ответить с цитированием
Dessl
 
Аватар для Dessl

Регистрация: Feb 2008
Сообщений: 36
По умолчанию Как задать цвет объекта в зависимости от числового значения?

Добрый день.

У объекта есть свойство типа Number, задается динамично, диапазон значений от 0 до 2000. В зависимости от этого свойства должен задаваться цвет объекта, т.е. например 0 это красный до 1000 переходит в желтый потом из желтого до 2000 переход в зеленый. Как задать объекту цвет если допустим значение свойства равно 756 или 1567.

Подскажите пожалуйста как такое реализовать. Можно ссылку где почитать. Никогда не работал с цветом в подобном контексте.

Спасибо!

Старый 18.11.2011, 11:16
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 2  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
формируйте 0xFF0000 если у вас 0.
определите сдвиг относительно вашей еденицы.
ничего сложного, просто надо работать с побитовым сдвигом или в шестнадцатиричной сс.

Старый 18.11.2011, 11:21
scarm вне форума Посмотреть профиль Отправить личное сообщение для scarm Найти все сообщения от scarm
  № 3  
Ответить с цитированием
scarm
[+1 20.11.11]
 
Аватар для scarm

Регистрация: 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 и присваиваем обновленный цвет объекту.

Старый 18.11.2011, 12:03
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 4  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
похоже тут надо интерполировать каждую сост цвета (р г б) по отдельности
чтот типа-
Код AS3:
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);
}
переход из красного в зеленый от координаты мышы (0 - 500)

еще есть Adjust Color . Hue


Последний раз редактировалось nuToH; 18.11.2011 в 14:14.
Старый 18.11.2011, 13:52
Dessl вне форума Посмотреть профиль Отправить личное сообщение для Dessl Найти все сообщения от Dessl
  № 5  
Ответить с цитированием
Dessl
 
Аватар для Dessl

Регистрация: Feb 2008
Сообщений: 36
Всем большое спасибо! Буду пробовать, позже отпишу что получилось.

Ребят а где можно почитать про подобные операции?
Код AS3:
var color:uint = (r << 16) | (g << 8) | 0x00;
Первый раз вижу, а хотелось бы понять как это работает.


Последний раз редактировалось Dessl; 18.11.2011 в 14:04.
Старый 18.11.2011, 14:13
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 6  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Цитата:
а где можно почитать про подобные операции?
http://help.adobe.com/ru_RU/FlashPla...ml#bitwise_AND
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 21.11.2011, 17:20
Dessl вне форума Посмотреть профиль Отправить личное сообщение для Dessl Найти все сообщения от Dessl
  № 7  
Ответить с цитированием
Dessl
 
Аватар для Dessl

Регистрация: Feb 2008
Сообщений: 36
Сделал через ColorTransform, на мой взгляд самый простой путь, хотя памяти убьет побольше наверное.
Не смог пока осилить побитовый сдвиг, да и время уже поджимает. Еще раз всем большое спасибо!

Старый 21.11.2011, 17:54
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 8  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Код AS3:
/**
     * 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;		
	}

в вашем случае эту функцию следует применять так:
Код AS3:
myColor:uint = interpolateColor(0xFF0000, 0xFFFF00, 765/1000);
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 21.11.2011 в 17:58.
Старый 25.11.2011, 09:44
Dessl вне форума Посмотреть профиль Отправить личное сообщение для Dessl Найти все сообщения от Dessl
  № 9  
Ответить с цитированием
Dessl
 
Аватар для Dessl

Регистрация: Feb 2008
Сообщений: 36
To artcraft Спасибо огромное... как раз то что нужно.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.