Изменение цвета объектов средствами ActionScript

Порой, при работе над flash-приложением, возникает необходимость перекрасить какой-либо объект (MovieClip, Sprite) на сцене флеш-ролика в новый цвет. И язык ActionScript предоставляет нам такую возможность. Так, в ActionScript 2.0 для этого используется класс Color.

Допустим, у нас в флеш-ролике имеется MovieClip с именем "mc". Этот мувик мы хотим перекрасить в красный (0xff0000) цвет.

Код ActionScript 2.0:

var color:Color = new Color(mc); color.setRGB(0xff0000);

Как видите, с помощью метода setRGB() класса Color наша задача решается быстро и легко.

В ActionScript 3.0 для изменение цвета у объектов списка отображения используются возможности класса ColorTransform. В самом простом случае это выглядит следующим образом.

Код ActionScript 3.0:

var ct:ColorTransform = new ColorTransform(); ct.color = 0xff0000; mc.transform.colorTransform = ct;

Как можно применить рассмотренные выше возможности класса Color языка ActionScript 2.0 и класса ColorTransform языка ActionScript 3.0 на практике? Ну, например, мы можем создать простое приложение-«раскраску».

Делать пример я буду в Adobe Flash CS 5.5 и на ActionScript 3.0. Для нашей будущей раскраски нужна заготовка: давайте нарисуем человечка и все составляющие части этого человечка (голову, туловище, руки, ноги ... ) сделаем мувиклипами. Этим мувиклипам дадим имена "mc_1", "mc_2", "mc_3" и так далее. Кроме этого, нам понадобится стандартный компонент ColorPicker (можно, кстати, воспользоваться палитрой цветов из урока «Создание палитры цветов на ActionScript 3.0»). Просто перетащите данный компонент из окна «Компоненты» на рабочий стол программы, а потом удалите его с рабочего стола (при этом компонент останется в библиотеке вашего проекта).

Осталось написать код. Пишем...

Код ActionScript 3.0:

/* импорт классов */ import flash.display.MovieClip; import flash.events.MouseEvent; import fl.controls.ColorPicker; import fl.events.ColorPickerEvent; /* переменная, в которой хранится выбранный пользователем цвет */ var color:uint = 0x000000; /* мувиклипы, из которых состоит раскраска при клике по любому из мувиков будет вызываться функция onClick */ mc_1.addEventListener(MouseEvent.CLICK, onClick); mc_2.addEventListener(MouseEvent.CLICK, onClick); mc_3.addEventListener(MouseEvent.CLICK, onClick); mc_4.addEventListener(MouseEvent.CLICK, onClick); mc_5.addEventListener(MouseEvent.CLICK, onClick); mc_6.addEventListener(MouseEvent.CLICK, onClick); mc_7.addEventListener(MouseEvent.CLICK, onClick); mc_8.addEventListener(MouseEvent.CLICK, onClick); mc_9.addEventListener(MouseEvent.CLICK, onClick); mc_10.addEventListener(MouseEvent.CLICK, onClick); mc_11.addEventListener(MouseEvent.CLICK, onClick); mc_12.addEventListener(MouseEvent.CLICK, onClick); mc_13.addEventListener(MouseEvent.CLICK, onClick); mc_14.addEventListener(MouseEvent.CLICK, onClick); mc_15.addEventListener(MouseEvent.CLICK, onClick); mc_16.addEventListener(MouseEvent.CLICK, onClick); mc_17.addEventListener(MouseEvent.CLICK, onClick); mc_18.addEventListener(MouseEvent.CLICK, onClick); mc_19.addEventListener(MouseEvent.CLICK, onClick); mc_20.addEventListener(MouseEvent.CLICK, onClick); mc_21.addEventListener(MouseEvent.CLICK, onClick); mc_22.addEventListener(MouseEvent.CLICK, onClick); mc_23.addEventListener(MouseEvent.CLICK, onClick); mc_24.addEventListener(MouseEvent.CLICK, onClick); mc_25.addEventListener(MouseEvent.CLICK, onClick); /* функция, которая срабатывает при клике по мувику именно эта функция и меняет цвет мувиклипов */ function onClick(event:MouseEvent):void { var ct:ColorTransform = new ColorTransform(); ct.color = color; event.target.transform.colorTransform = ct; } /* добавляем ColorPicker, чтобы пользователь мог бы выбрать нужный ему цвет */ var colorPicker:ColorPicker = new ColorPicker(); colorPicker.move(50, 50); colorPicker.addEventListener(ColorPickerEvent.CHANGE, changeColorPicker); addChild(colorPicker); function changeColorPicker(event:ColorPickerEvent):void { color = event.target.selectedColor; }

У меня получилось следующее:

Выбираем в ColorPicker-е любой цвет и кликаем курсором мышки по человечку. Примитивно, но примеры и должны быть простыми. Естественно, если вы потратите больше времени и сил, чем я, то и результат получите более достойный.

Скачать исходник к данному уроку можно здесь (на ActionScript 3.0 и под Adobe Flash 5.5).

Автор: admin

Дата добавления: 2012-03-29

Просмотров: 12758

Рейтинг поста: +37-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Станислав
Дата добавления: 2016-01-04
Здравствуйте, Дмитрий! Хочу заказ вам сделать, написал в скайп пару дней назад, видимо вы редко заходите. Зайдите, прочтите.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-12-19
Здравствуйте. Как-то так: http://edapskov.ru/pages.php?id=271
Комментатор
Комментарий добавил(а): Андрей
Дата добавления: 2015-12-19
Здравствуйте, у меня вопрос: есть мувиклип с плавным проявлением и затуханием картинки (png), требуется динамически подгрузить другую png и на место существующей заменить. Подскажите, пожалуйста, как это сделать.

Код динамической загрузки png картинки:
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;

import flash.events.Event;
var pictLdr:Loader = new Loader();
var pictURL:String = "111.png"
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
this.addChild(pictLdr);

Заранее спасибо)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-07-09
Можно так:


var movieClips:Object = {
mc_1:{
currentColor:null
},
mc_2:{
currentColor:null
},
mc_3:{
currentColor:null
}
};

var color:uint = 0xff0000;

var movieClip:MovieClip;
for (var props in movieClips)
{
movieClip = this.getChildByName(props) as MovieClip;
movieClip.addEventListener(MouseEvent.CLICK, onClickFunc);
}

function onClickFunc(event:MouseEvent):void
{
/*

*/
var currentMovieClip:MovieClip = event.currentTarget as MovieClip;
var ct:ColorTransform = new ColorTransform();
movieClips[currentMovieClip.name].currentColor = ct.color = color;
currentMovieClip.transform.colorTransform = ct;

/*

*/
var checkColor:Boolean = true;
for (var props in movieClips)
{
currentMovieClip = this.getChildByName(props) as MovieClip;
if(movieClips[props].currentColor != color)
{
checkColor = false;
break;
}
}
/*

*/
if(checkColor)
{
trace("Верно")
}
else
{
trace("Ошибка")
}
}
Комментатор
Комментарий добавил(а): Инна
Дата добавления: 2014-07-09
Подскажите пожалуйста ответ ещё на один вопрос. Есть несколько мувиклипов, каждый из которых при нажатии наскрашивается в красный цвет. Например:

mc.addEventListener(MouseEvent.CLICK, Paint_1);
function Paint_1(event:MouseEvent):void
{
var ct:ColorTransform = new ColorTransform();
ct.color = 0xff0000;
mc.transform.colorTransform = ct;
}
mc2.addEventListener(MouseEvent.CLICK,Paint_2);
function Paint_2(event:MouseEvent):void
{
var ct:ColorTransform = new ColorTransform();
ct.color = 0xff0000;
mc2.transform.colorTransform = ct;
}
Как сделать проверку. Если все они раскрашены красным, то выдаётся надпись "Верно". Мувиклипов при этом довольно много (40).
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-06-27
> Скажите, пожалуйста, как заблокировать кнопку после однократного нажатия, чтобы её не нажимали повторно.

Можно так:


myBtn.addEventListener(MouseEvent.CLICK, onClickFunc);
function onClickFunc(event:MouseEvent):void
{
event.currentTarget.removeEventListener(MouseEvent.CLICK, onClickFunc);
}


или так:


myBtn.addEventListener(MouseEvent.CLICK, onClickFunc);
function onClickFunc(event:MouseEvent):void
{
event.currentTarget.mouseEnabled = false;
}
Комментатор
Комментарий добавил(а): Инна
Дата добавления: 2014-06-27
Здравствуйте. У меня возник вопрос в дополнение к посту от 2014-02-09.
Скажите, пожалуйста, как заблокировать кнопку после однократного нажатия, чтобы её не нажимали повторно.
Например, есть меню с несколькими кнопками. При нажатии на одну из них осуществляется переход на определённый кадр. При возвращении обратно в меню нажатая кнопка изменяет свой цвет. Как заблокировать эту кнопку, чтобы её больше не нажимали.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-05-25

this.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboardDownFunc);


Но сперва придётся отловить момент, когда stage станет доступно:


this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStageFunc);
Комментатор
Комментарий добавил(а): Михаил
Дата добавления: 2014-05-25
Спасибо!
Раз уж вы так оперативно отвечаете на мои вопросы, воспользуюсь этим;).
Есть у меня класс шарика. Мне нужно, чтоб он реагировал на события клавиатуры (например, бегал влево-вправо). Можно ли как-нибудь вставить слушатель события клавиатуры внутрь класса? Если с событием мыши мне всё понятно, то с клавиатурой проблема -- не знаю, к чему его прикрепить.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-05-22
Допустим, есть мувик Picture_mc, внутри которого лежат ещё два мувика с именами mc_1 и mc_2. Мувиклипу Picture_mc соответствует одноимённый класс Picture_mc. От класса Picture_mc наследует класс HeirPicture_mc. Допусти, класс HeirPicture_mc выглядит примерно так:


package
{
public class HeirPicture_mc extends Picture_mc
{
public function HeirPicture_mc()
{

}
}
}


Далее, класс HeirPicture_mc используется в вашем коде. Например, так:


var heirPicture_mc:HeirPicture_mc = new HeirPicture_mc();
addChild(heirPicture_mc);



Тогда покрасить отдельные части (mc_1 и mc_2) Picture_mc можно будет так:


var color:uint = 0x000000;

var heirPicture_mc:HeirPicture_mc = new HeirPicture_mc();
addChild(heirPicture_mc);

var ct:ColorTransform = new ColorTransform();
ct.color = color;
heirPicture_mc.mc_1.transform.colorTransform = ct;


Надеюсь, я вас правильно понял.
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Страница 1 из 3: 123
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика