![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2011
Сообщений: 15
|
Доброго времени суток!
Я изучал различные способы создания эффектов смены картинок - с использованием простой анимации, масок и BitmapData. Нашел интересный способ реализованный на другом движке. Сначала рисуется черно-белая "маска" ![]() Картинки появляются частями, сначала те которые соответствуют черному цвету, далее оттенки серого цвета и в конце белые. Возможно ли такое реализовать на Flash? |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
|
|
|||||
|
Регистрация: Dec 2011
Сообщений: 15
|
Цитата:
|
|
|||||
|
поподробнее смотри все, что связано с фильтрами и методами BitmapData
конкретно по сабжу у меня такой вариант получился, вся кухня в методе draw import flash.display.BitmapData; import flash.filters.ColorMatrixFilter; Stage.scaleMode = "noScale"; var GRAY_FILTER:ColorMatrixFilter = new ColorMatrixFilter([0.212671, 0.71516, 0.072169, 0, 0, 0.212671, 0.71516, 0.072169, 0, 0, 0.212671, 0.71516, 0.072169, 0, 0, 0, 0, 0, 1, 0]); // картинка из библиотеки, например var image:BitmapData = BitmapData.loadBitmap("image"); //исходный битмап (32битный) var source:BitmapData = new BitmapData(image.width, image.height, true, 0xFFFFFFFF); source.draw(image); // то, что будем показывать var result:BitmapData = new BitmapData(source.width, source.height, true, 0xFFFFFFFF); var sourceMC:MovieClip = createEmptyMovieClip("mc1", 0); var resultMC:MovieClip = createEmptyMovieClip("mc2", 1); resultMC._x = image.width; sourceMC.attachBitmap(source,0); resultMC.attachBitmap(result,0); // стартовый порог var threshold:Number = 0; // запускаем отрисовку по таймеру var id:Number = setInterval(draw, 30); function draw() { // копия исходного var tmp:BitmapData = new BitmapData(source.width, source.height, true, 0xFFFFFFFF); tmp.copyPixels(source,source.rectangle,new Point()); // прегоняем в отттенки серого tmp.applyFilter(tmp,tmp.rectangle,new Point(),GRAY_FILTER); // все что выше порога, метим нулевой альфой tmp.threshold(tmp,tmp.rectangle,new Point(),">",threshold,0x0,0xFF); // копируем исходный, используя полученный трафарет в качестве маски result.copyPixels(source,source.rectangle,new Point(),tmp,new Point()); // останавливаем, как доедем до белого if(threshold++>=0xFF) { clearInterval(id); } } // по клику перезапускаем (к делу не относится) var tf:TextField=createTextField("tf",2,0,source.height,200,20); tf.text="click to reset"; onMouseDown=function(){ clearInterval(id); threshold = 0; id = setInterval(draw, 30); } |
|
|||||
|
Регистрация: Dec 2011
Сообщений: 15
|
Огромное спасибо
И за совет, и за код, и за исходники. Получилось красиво и работает так как надо. Правда я хотел не отрисовывать картинки, а использовать их в качестве маски, но этим я наверное займусь через год когда с армии вернусь ) |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|