Раскраска клипов во Flash в зависимости от параметра.

Здравствуйте, уважаемые любители этого интересного. Намедни потребовалось окрасить клипы в зависимости от числового значения какого-либо параметра от светло-зеленого (маленькое значение числа) к темно-зеленому (большое значение). Скажем, у нас есть карта мира, нужно покрасить континенты в цвета в зависимости от количества человек на нём проживающих.

Господин 1ion в купе со мной подсобил в этом начинании — теперь у нас есть обалденная штука для покраски клипов.

Приступаем. У нас есть (возьмем скажем 6) клипов белого цвета. Для покраски нам потребуется занести их в массив, а так же присвоить им значение количества людей на континентах. Затем ввести значения цветов в переменные, написать функцию для смещения цвета и собственно применить colorTransform к клипам из массива.

var clips:Array = [mc1, mc2, mc3, mc4, mc5, mc6];

for (var i:int = 0; i < clips.length; i++)
{
  //добавляем динамически свойство (количество людей)
  clips[i]['population'] = i + 1;
}

//мы знаем что максимальное количество людей - 6. Вы можете брать эти данные откуда угодно и как угодно

//цвета и расчеты

private static const r1:Number = 255; /* белый цвет */
private static const g1:Number = 255;
private static const b1:Number = 255;

private static const r2:Number = 57;  /*темно-зеленый*/
private static const g2:Number = 145;
private static const b2:Number = 0;

private static const raznr:Number = r2 - r1; /*разницы значения красного, синего и зеленого (RGB)*/
private static const razng:Number = g2 - g1;
private static const raznb:Number = b2 - b1;

private static var maxvalue:int; //максимальное количество людей. В данном случае 8.

private var stepr:Number; /*шаг изменения цвета RGB*/
private var stepg:Number;
private var stepb:Number;

//функция установки смещения цвета
private function setColor(num:int):Array
{
  
  var cur_r = r1 + num * stepr;
  var cur_g = g1 + num * stepg;
  var cur_b = b1 + num * stepb;
  
  if (cur_r < 0)
  {
    cur_r = 0;
  }
  else if (cur_r > 255)
  {
    cur_r = 255;
  }
  
  if (cur_g < 0)
  {
    cur_g = 0;
  }
  else if (cur_g > 255)
  {
    cur_g = 255;
  }
  
  if (cur_b < 0)
  {
    cur_b = 0;
  }
  else if (cur_b > 255)
  {
    cur_b = 255;
  }
  return [cur_r / 255, cur_g / 255, cur_b / 255];
}

//раскраска клипов
private function colorizeContinents():void
{
  maxvalue = 6;
  
  stepr = raznr / maxvalue;
  stepg = razng / maxvalue;
  stepb = raznb / maxvalue;
  
  for (var i:int = 0; i < clips.length; i++)
  {
    var t_arr = setColor(clips[i]['population']);
    MovieClip(clips[i]).transform.colorTransform = new ColorTransform(t_arr[0], t_arr[1], t_arr[2]);
  }
}

colorizeContinents();


* This source code was highlighted with Source Code Highlighter.

Вот собственно и всё. 1ion’у респект и копирайты ©, а вам радости полные штаны. Юзайте.

Комменты можно подготовить в переводчике для блондинок.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: