PDA

Просмотр полной версии : Эффект водяных разводов


greatilya
26.06.2009, 20:14
Я во flash новичок. На самом деле я программист по многим другим веб-языкам. Схватываю все быстро. Подскажите, хотя бы советом как сделать эффект водяных(маслянных) разводов. Объяснять долго, посмотрите на сайте total-chel.ru. Там в банере надо мышкой поводить...
Вобщем суть повторить такое, как на сайте.
Заранее благодарен!

etc
26.06.2009, 20:21
http://silin.fatal.ru/#AS2/ripple

greatilya
26.06.2009, 20:43
Огромное спасибо.. уже разобрался практически)

greatilya
01.07.2009, 18:03
Подскажите как сделать эффект похожий на МАСЛЯННЫЕ разводы? Они должны быть менее динамичными так сказать... И быстрее возвращаться в исходное состояние должна картинка.
вот код:
import flash.display.BitmapData;
import flash.filters.ConvolutionFilter;
import flash.filters.DisplacementMapFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.filters.BitmapFilter;

class com.silin.Ripple extends MovieClip {

private var res1 : BitmapData;
private var res2 : BitmapData;
private var map : BitmapData;
private var buf : BitmapData;

private var source : BitmapData;
private var output : BitmapData;
private var w : Number, h : Number, w2 : Number, h2 : Number;

private var QUARTER : Rectangle;
private var FULL : Rectangle;
private var ORIGIN : Point;
private var IDENTITY : Matrix;
private var DOUBLE : Matrix;
private var WAVE : BitmapFilter;
private var DAMP : ColorTransform;
private var water : DisplacementMapFilter ;
////////////////////////////
public function Ripple(bitmap:BitmapData){

source=bitmap;
w = source.width;
h = source.height;
output=new BitmapData(w,h, false, 128);
attachBitmap(output,0);
w2 = w / 2;
h2 = h / 2;
res1 = new BitmapData (w2, h2, false, 128);
res2 = new BitmapData (w, h, false, 128);
map = new BitmapData (w2, h2, false, 128);
buf = new BitmapData (w2, h2, false, 128);
WAVE = BitmapFilter(new ConvolutionFilter (3, 3, [1,1,1,1,1,1,1,1,1], 9, 0));
DAMP = new ColorTransform (0, 0, 0.99609374, 1, 0, 0, 2, 0);
water = new DisplacementMapFilter (res2, ORIGIN, 4, 4, 32, 32, "ignore");
ORIGIN = new Point ();
QUARTER = new Rectangle (0, 0, w2, h2);
FULL = new Rectangle (0, 0, w, h);
IDENTITY = new Matrix ();
DOUBLE = new Matrix ();
DOUBLE.a = DOUBLE.d = 2;
start();

}

public function wobbleXY (x : Number, y : Number) :Void {
x /= 2;
y /= 2;
map.setPixel (x + 1, y, 0xFFFFFF);
map.setPixel (x - 1, y, 0xFFFFFF);
map.setPixel (x, y + 1, 0xFFFFFF);
map.setPixel (x, y - 1, 0xFFFFFF);
map.setPixel (x, y, 0xFFFFFF);
}

private function render ():Void {
res1.applyFilter(map, QUARTER, ORIGIN, WAVE);
res1.draw (res1, IDENTITY, null, "add");
res1.draw (buf, IDENTITY, null, "difference");
res1.draw (res1, IDENTITY, DAMP);
res2.draw (res1, DOUBLE, null, null, null, true);
output.applyFilter(source, FULL, ORIGIN, BitmapFilter(water));
buf = map;
map = res1.clone ();
}

public function start ():Void {
onEnterFrame=render;
}

public function randomWobble (n : Number):Void{
if(n==undefined) n= w/3;
start();
for (var i = 0; i < n; i ++)
wobbleXY (1 + random (w - 1) , 1 + random (h - 1));

}

public function stay () :Void{
onEnterFrame=null;
}

public function clear ():Void{
stay();
res1 = new BitmapData (w2, h2, false, 128);
res2 = new BitmapData (w, h, false, 128);
map = new BitmapData (w2, h2, false, 128);
buf = new BitmapData (w2, h2, false, 128);
water = new DisplacementMapFilter (res2, ORIGIN, 4, 4, 32, 32, "ignore");
render();
}
public function mouseWobble():Void {
start();
wobbleXY(_xmouse,_ymouse);
}

public function onMouseMove(){
if(!hitTest(_root._xmouse,_root._ymouse))return;
onMouseMove=mouseWobble;
mouseWobble();
}
public function onMouseUp() {
//onMouseMove=null;
}

}
Ключевые как я понимаю тут строки эти:
import flash.filters.DisplacementMapFilter;
private var water : DisplacementMapFilter ;
output.applyFilter(source, FULL, ORIGIN, BitmapFilter(water));
Как я понимаю кодключается некая библиотека "DisplacementMapFilter"...
Подскажите где можно найти параметры этих разводов....
Заранее благодарен... )