Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Motion Blur используя actionscript (http://www.flasher.ru/forum/showthread.php?t=98181)

Anait Sagoyan 08.07.2007 16:11

Motion Blur используя actionscript
 
Есть мувиклип myBall и код на нем:

Код:

onClipEvent(enterFrame) {
        speed = 6;
        this._x += speed;
}

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

Если бы кто мог помочь.

Спасибо.

iNils 08.07.2007 16:50

Для оформления своего кода, надо использовать теги [code][/code].

wvxvw 08.07.2007 21:03

Код:

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

Спасибо, конечно, за проявленное внимание, но это не совсем то, т.к. мне нужно было размытие при движении мувиклипа, т.е. в начальной и конечной позиции мувик должен быть в нормальном состоянии, но во время движения от начала к концу он должен размываться, как будто при большой скорости.

Wolsh 09.07.2007 09:54

Вам нужно вот это: http://img148.**************/my.php?i...ionblursc4.swf
Это разработка товарища LiQuiDaToR, выложенная в этой теме.
Исходники найдете на второй странице темы. Удачи в интеграции :)

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

Цитата:

Сообщение от Wolsh
Вам нужно вот это: http://img148.**************/my.php?i...ionblursc4.swf
Это разработка товарища LiQuiDaToR, выложенная в этой теме.
Исходники найдете на второй странице темы. Удачи в интеграции :)

Motion Blur, конечно, хороший, но исходники, выложенные на webfile, к сжалению уже удалены, возможно из-за неактивности. :(

Anait Sagoyan 09.07.2007 13:54

Цитата:

Сообщение от this.create
Код:

/* 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;
        }
};


Интересно, но почему тогда размытие не проходит к тому моменту, когда мувик доходит до конечной координаты? Ведь в этом и вся суть, что размытие должно быть именно в процессе движения, но не в момент статического состояния.

Все равно спасибо, :) но все еще проблема не решена.

Wolsh 09.07.2007 14:09

ОК, я постараюсь найти и выложить, где-то сохранял :)
Но это часов через пять-шесть :(

Anait Sagoyan 09.07.2007 14:48

Спасибо! мне нужен именно этот эффект, а его исхоника, к сожалению нет уже на той странице. Если найдете у себя, я была бы очень благодарна!

this.create 09.07.2007 14:54

Цитата:

Сообщение от Anait Sagoyan
Интересно, но почему тогда размытие не проходит к тому моменту, когда мувик доходит до конечной координаты? Ведь в этом и вся суть, что размытие должно быть именно в процессе движения, но не в момент статического состояния.

Код:

/* 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 = [];
};

А так?

Wolsh 09.07.2007 16:13

Ага, только это совсем не моушн блюр, this.create.
Это проходящий блюр. Чтобы было похоже, надо под неразмытым шариком пускать размытый, на некотором отдалении, как бы отстающий. Ну и, наверное, неразмытому альфу поставить где-то 80%.

Wolsh 09.07.2007 18:52

Вот, выложил исходник :)

Anait Sagoyan 09.07.2007 19:54

Спасибо вам за исходник! :) Вы мне им очень помогли, ведь это именно то, что я искала все эти дни и не находила своими силами.

Wolsh 09.07.2007 20:22

О нет, спасибо LiQuiDaToR'у. За то, что не только сделал это, но и поделился со всеми. Еще раз удачи!

Therion 09.07.2007 20:38

Блик как там всё намудренно
а ведь можно всё намного проще сделать....
Код:

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;
};


Wolsh 09.07.2007 21:03

Therion, неужели ты разницы не видишь? Совсем-совсем?
Попробуй провести свой обж по диагонали.
Заодно обрати внимание на производительность.

Therion 09.07.2007 21:21

ну да, по диагонали эффект не такой...но производительность вроде не хуже...

Wolsh 10.07.2007 10:22

О нет, гораздо хуже, извини. В результате действия твоего скрипта объект мигает как патрульная машина и всё таки скорее просто размывется, чем размывается в определенном направлении. Поверь, если бы такой эффект можно было создать нахрапом, с первого наброска... Но нет, здесь продумать надо, сначала декодировать явление, а уж потом закодировать его в ас. А производительность - момент настолько тонкий, что под силу только ниндзям, знающим особенности аппаратной работы.
В этом уникальность кода LiQuiDaToR'а. Со всем уважением.

etc 10.07.2007 11:21

Therion, это не Motion Blur. Motion Blur действует параллельно вектору скорости, а у тебя вообще просто размывает объект.

Lobster2 11.07.2007 19:30

To Wolsh:

привет, я тут невзначай посмотрел исходник, что ты выложил, и у меня родился такой вопрос:
Как сделать, чтобы одновременно на экране были несколько шаров, если у меня есть несколько координат, которые я подаю вместо координат мыши?

Ну допустим 3 шара сразу по 3-м независимым X и Y?

Спасибо.

Wolsh 12.07.2007 01:43

1. а у тебя что, четырехядерный процессор?
2. прочти внимательно мои сообщения - я как минимум три раза сказал, что исходник не мой.


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

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