Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 24.11.2009, 19:48
tananuka вне форума Посмотреть профиль Отправить личное сообщение для tananuka Найти все сообщения от tananuka
  № 1  
tananuka
 
Аватар для tananuka

Регистрация: Jul 2007
Сообщений: 80
По умолчанию опять Ripple )

Решил переписать на ас3 вот ето http://www.silin.su/#AS2/ripple
но чото не работает))) Помогите люди добрые и умные...
приложил исходник етого тестового проекта из 2 классов:
Код AS3:
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	[SWF( backgroundColor='0x121212', frameRate='35', width='256', height='256')]
 
	public class Main extends Sprite
	{
		[Embed(source='pattern.gif' )] private const Pattern: Class;
		public var ripple:Ripple;
 
		public function Main()
		{
			graphics.beginBitmapFill( Bitmap( new Pattern() ).bitmapData );
			graphics.drawRect( 0, 0, 256, 256 );
			graphics.endFill();
			ripple = new Ripple(500, 500);
			this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove)
			this.addEventListener(Event.ENTER_FRAME, onEnterFrame)
		}
		private function mouseMove (_e:MouseEvent):void
		{
			ripple.wobbleXY(this.mouseX, this.mouseY, 1);
		}
		private function onEnterFrame(_e:Event):void
		{
			//пересчитываем карту смещений в Ripple
			ripple.render();
			//применяем фильтр
			this.filters = [ripple.filter];
		}
	}	
}
Код AS3:
package
{
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.filters.ConvolutionFilter;
	import flash.filters.DisplacementMapFilter;
	import flash.filters.DisplacementMapFilterMode;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
 
	public class Ripple 
	{
		private var _filter:DisplacementMapFilter;
 
		private var mapBMP: BitmapData;
		private var resBMP : BitmapData;
 
		private var bufBMP : BitmapData;
		private var mtrx1 : Matrix;
		private var mtrx2 : Matrix;
		private var wave : ConvolutionFilter;
		private var damp : ColorTransform;
 
		private var width:Number;
		private var height:Number;
 
		private var quartRect:Rectangle;
 
		public function Ripple(w:Number, h:Number) 
		{
			width = w;
			height = h;
			quartRect = new Rectangle(0, 0, width/2,height/2);
			mtrx1 = new Matrix();
			mtrx2 = new Matrix(2, 0, 0, 2);
 
			mapBMP = new BitmapData(width, height, false, 128);
			resBMP = new BitmapData(width, height, false, 128);
			bufBMP = new BitmapData(width, height, false, 128);
 
			wave = 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);
 
			_filter = new DisplacementMapFilter (new BitmapData(width, height, false, 128), new Point(), 4, 4, 32, 32, DisplacementMapFilterMode.IGNORE);
 
		}
 
		public function render():void
		{
			resBMP.applyFilter (mapBMP, quartRect, new Point(), wave);
			resBMP.draw(resBMP,mtrx1,null, BlendMode.ADD);
			resBMP.draw (bufBMP, mtrx1, null, BlendMode.DIFFERENCE);
			resBMP.draw (resBMP, mtrx1, damp);
 
			_filter.mapBitmap.draw(resBMP, mtrx2, null, null, null, true);
			bufBMP = mapBMP;
			mapBMP = resBMP.clone();
		} 
 
		public function clear():void 
		{
 
			resBMP = new BitmapData (width, height, false, 128);
			mapBMP = new BitmapData (width, height, false, 128);
			bufBMP = new BitmapData (width, height, false, 128);
			wave = 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);
 
			_filter.mapBitmap = new BitmapData(width, height, false, 128);
 
		}
 
		public function wobbleXY (x : Number, y : Number, d:Number):void 
		{
			if (!d) d = 1;
			var dx:Number = Math.round(x / 2);
			var dy:Number = Math.round(y / 2);
 
			mapBMP.setPixel (dx + d, dy, 0xFFFFFF);
			mapBMP.setPixel (dx - d, dy, 0xFFFFFF);
			mapBMP.setPixel (dx, dy + d, 0xFFFFFF);
			mapBMP.setPixel (dx, dy - d, 0xFFFFFF);
			mapBMP.setPixel (dx, dy, 0xFFFFFF);
		}
 
		public function wobble (n : Number):void 
		{
			if (!n) n = 32;
			for (var i:Number = 0; i < n; i++) {
				wobbleXY (width*Math.random() , height*Math.random(), 1);
			}
		}
 
		public function get filter():DisplacementMapFilter { return _filter; }
 
	}
}
Вложения
Тип файла: zip PixelRain.zip (12.2 Кб, 33 просмотров)

Старый 24.11.2009, 20:10
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
http://www.silin.su/#AS3/filters/ripple

Старый 24.11.2009, 20:10
tananuka вне форума Посмотреть профиль Отправить личное сообщение для tananuka Найти все сообщения от tananuka
  № 3  
tananuka
 
Аватар для tananuka

Регистрация: Jul 2007
Сообщений: 80
ой не успел порыться потому сайту, там есть и на ас3...
плиз удалите тему ....

Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 09:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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