Просмотр полной версии : Motion Blur используя actionscript
Anait Sagoyan
08.07.2007, 16:11
Есть мувиклип myBall и код на нем:
onClipEvent(enterFrame) {
speed = 6;
this._x += speed;
}
нужно, чтобы во время движения по сцене мувик еще и размывался, кажется для этого есть специальный код, но не знаю как его использовать, к сожалению...
Если бы кто мог помочь.
Спасибо.
Для оформления своего кода, надо использовать теги .
import flash.filters.BlurFilter;
System.security.allowDomain("http://www.helpexamples.com");
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
// Center the target_mc movie clip on the Stage.
target_mc._x = (Stage.width - target_mc._width) / 2;
target_mc._y = (Stage.height - target_mc._height) / 2;
};
this.createEmptyMovieClip("img_mc", 10);
var img_mcl:MovieClipLoader = new MovieClipLoader();
img_mcl.addListener(mclListener);
img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc);
var blur:BlurFilter = new BlurFilter(10, 10, 2);
var mouseListener:Object = new Object();
mouseListener.onMouseMove = function():Void {
/* Moving the pointer to the center of the Stage sets the blurX and blurY properties to 0%. */
blur.blurX = Math.abs(_xmouse - (Stage.width / 2)) / Stage.width * 2 * 255;
blur.blurY = Math.abs(_ymouse - (Stage.height / 2)) / Stage.height * 2 * 255;
img_mc.filters = [blur];
};
Mouse.addListener(mouseListener);
Пример из хелпа (чтобы посмотреть, как работает, надо мышкой над картинкой поводить)
ЗЫ. Лучше писать код на таймлайне, а не на отдельных клипах, потом легче найти, да и взаимодействие между разными обэктами легче организовать.
Anait Sagoyan
08.07.2007, 22:53
Спасибо, конечно, за проявленное внимание, но это не совсем то, т.к. мне нужно было размытие при движении мувиклипа, т.е. в начальной и конечной позиции мувик должен быть в нормальном состоянии, но во время движения от начала к концу он должен размываться, как будто при большой скорости.
Вам нужно вот это: http://img148.**************/my.php?image=motionblursc4.swf
Это разработка товарища LiQuiDaToR, выложенная в этой теме (http://www.flasher.ru/forum/showthread.php?t=87139).
Исходники найдете на второй странице темы. Удачи в интеграции :)
this.create
09.07.2007, 12:39
/* mc - мувиклип на сцене. Как его туда поместить решайте сами.*/
//
import flash.filters.BlurFilter;
//
//скорость перемещения клипа
var speed:Number = 6;
//мах размытие
var blurMax:Number = 5;
//скорость размытия
var blurSpeed:Number = .1;
//
mc.onEnterFrame = function():Void {
var ar:BlurFilter = this.filters[0];
if (ar) {
ar.blurX>=blurMax ? ar.blurX=ar.blurY=blurMax : ar.blurX=ar.blurY += blurSpeed;
} else {
ar = new BlurFilter(0, 0, 2);
}
this.filters = [ar];
this._x += speed;
if (this._x>=Stage.width-this._width) {
delete this.onEnterFrame;
this._x = Stage.width-this._width;
}
};
Anait Sagoyan
09.07.2007, 13:48
Вам нужно вот это: http://img148.**************/my.php?image=motionblursc4.swf
Это разработка товарища LiQuiDaToR, выложенная в этой теме (http://www.flasher.ru/forum/showthread.php?t=87139).
Исходники найдете на второй странице темы. Удачи в интеграции :)
Motion Blur, конечно, хороший, но исходники, выложенные на webfile, к сжалению уже удалены, возможно из-за неактивности. :(
Anait Sagoyan
09.07.2007, 13:54
/* mc - мувиклип на сцене. Как его туда поместить решайте сами.*/
//
import flash.filters.BlurFilter;
//
//скорость перемещения клипа
var speed:Number = 6;
//мах размытие
var blurMax:Number = 5;
//скорость размытия
var blurSpeed:Number = .1;
//
mc.onEnterFrame = function():Void {
var ar:BlurFilter = this.filters[0];
if (ar) {
ar.blurX>=blurMax ? ar.blurX=ar.blurY=blurMax : ar.blurX=ar.blurY += blurSpeed;
} else {
ar = new BlurFilter(0, 0, 2);
}
this.filters = [ar];
this._x += speed;
if (this._x>=Stage.width-this._width) {
delete this.onEnterFrame;
this._x = Stage.width-this._width;
}
};
Интересно, но почему тогда размытие не проходит к тому моменту, когда мувик доходит до конечной координаты? Ведь в этом и вся суть, что размытие должно быть именно в процессе движения, но не в момент статического состояния.
Все равно спасибо, :) но все еще проблема не решена.
ОК, я постараюсь найти и выложить, где-то сохранял :)
Но это часов через пять-шесть :(
Anait Sagoyan
09.07.2007, 14:48
Спасибо! мне нужен именно этот эффект, а его исхоника, к сожалению нет уже на той странице. Если найдете у себя, я была бы очень благодарна!
this.create
09.07.2007, 14:54
Интересно, но почему тогда размытие не проходит к тому моменту, когда мувик доходит до конечной координаты? Ведь в этом и вся суть, что размытие должно быть именно в процессе движения, но не в момент статического состояния.
/* mc - мувиклип на сцене. Как его туда поместить решайте сами.*/
//
import flash.filters.BlurFilter;
import mx.transitions.*;
import mx.transitions.easing.*;
//
var prevX:Number = mc._x;
var blurStrength:Number = 5;
//
var tw:Tween = new Tween(mc, '_x', Strong.easeOut, 10, Stage.width-mc._width, 2, true);
tw.onMotionChanged = function():Void {
var dif:Number = ((mc._x-prevX)/10)*blurStrength;
prevX = mc._x;
if (dif>5) {
dif = 5;
}
var ar:BlurFilter = mc.filters[0];
if (ar) {
ar.blurX = ar.blurY=dif;
} else {
ar = new BlurFilter(0, 0, 2);
}
mc.filters = [ar];
};
tw.onMotionStopped = function():Void {
mc.filters = [];
}; А так?
Ага, только это совсем не моушн блюр, this.create.
Это проходящий блюр. Чтобы было похоже, надо под неразмытым шариком пускать размытый, на некотором отдалении, как бы отстающий. Ну и, наверное, неразмытому альфу поставить где-то 80%.
Вот, выложил исходник (http://wolsh.pisem.net/files/Motion Blur.rar) :)
Anait Sagoyan
09.07.2007, 19:54
Спасибо вам за исходник! :) Вы мне им очень помогли, ведь это именно то, что я искала все эти дни и не находила своими силами.
О нет, спасибо LiQuiDaToR'у. За то, что не только сделал это, но и поделился со всеми. Еще раз удачи!
Блик как там всё намудренно
а ведь можно всё намного проще сделать....
import flash.filters.BlurFilter;
obj.onEnterFrame = function() {
X = _xmouse-this._x;
Y = _ymouse-this._y;
D = Math.sqrt(X*X+Y*Y)/10;
this._x += X/8;
this._y += Y/8;
var filter:BlurFilter = new BlurFilter(Math.abs(X/8), Math.abs(Y/8), 1);
var filterArray:Array = new Array();
filterArray.push(filter);
this.filters = filterArray;
};
Therion, неужели ты разницы не видишь? Совсем-совсем?
Попробуй провести свой обж по диагонали.
Заодно обрати внимание на производительность.
ну да, по диагонали эффект не такой...но производительность вроде не хуже...
О нет, гораздо хуже, извини. В результате действия твоего скрипта объект мигает как патрульная машина и всё таки скорее просто размывется, чем размывается в определенном направлении. Поверь, если бы такой эффект можно было создать нахрапом, с первого наброска... Но нет, здесь продумать надо, сначала декодировать явление, а уж потом закодировать его в ас. А производительность - момент настолько тонкий, что под силу только ниндзям, знающим особенности аппаратной работы.
В этом уникальность кода LiQuiDaToR'а. Со всем уважением.
Therion, это не Motion Blur. Motion Blur действует параллельно вектору скорости, а у тебя вообще просто размывает объект.
Lobster2
11.07.2007, 19:30
To Wolsh:
привет, я тут невзначай посмотрел исходник, что ты выложил, и у меня родился такой вопрос:
Как сделать, чтобы одновременно на экране были несколько шаров, если у меня есть несколько координат, которые я подаю вместо координат мыши?
Ну допустим 3 шара сразу по 3-м независимым X и Y?
Спасибо.
1. а у тебя что, четырехядерный процессор?
2. прочти внимательно мои сообщения - я как минимум три раза сказал, что исходник не мой.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.