Показать сообщение отдельно
Старый 01.07.2009, 18:03
greatilya вне форума Посмотреть профиль Отправить личное сообщение для greatilya Найти все сообщения от greatilya
  № 4  
Ответить с цитированием
greatilya

Регистрация: Jun 2009
Сообщений: 16
Подскажите как сделать эффект похожий на МАСЛЯННЫЕ разводы? Они должны быть менее динамичными так сказать... И быстрее возвращаться в исходное состояние должна картинка.
вот код:
Код AS1/AS2:
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;
	}
 
}
Ключевые как я понимаю тут строки эти:
Код AS1/AS2:
import flash.filters.DisplacementMapFilter;
private var water : DisplacementMapFilter ;
output.applyFilter(source, FULL, ORIGIN, BitmapFilter(water));
Как я понимаю кодключается некая библиотека "DisplacementMapFilter"...
Подскажите где можно найти параметры этих разводов....
Заранее благодарен... )