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

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

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Можно пиксельным эффектом, например. Писалось мной давно, наверное криво, разбираться и комментировать лень =)

И не спрашивайте меня, почему они начинают прыгать, я не помню
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.MovieClip;
	import flash.filters.BlurFilter;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.events.Event;
	import flash.events.MouseEvent;
	/**
	* ...
	* @author FluFme
	http://www.flufme.ru
	*/
	public class Main extends MovieClip 
	{
 
		private var bitmapData:BitmapData = new BitmapData(w, h, false, 0xFFFFFF);
		private var bitmap:Bitmap = new Bitmap(bitmapData);
		private var pixelArray:Array = [];
 
		private const w:int = 550;
		private const h:int = 400;
 
		private const actualWidth:int = 100;
		private const actualHeight:int = 100;
 
		private var image:BitmapData = new Img1(1,1);
		//private var image2:BitmapData = new Img2(1,1);
 
		private var areaRect:Rectangle = new Rectangle(0, 0, w, h);
		var m:Matrix = new Matrix(1, 0, 0, 1, int(w/2-actualWidth/2), int(h/2-actualHeight/2));
 
		private var l:int;
 
		private var xRandomility:int = 100;
		private var yRandomility:int = 50;
		private var fallSpeed:Number = 0.25;
		private var friction:Number = 0.9999;
 
 
 
		private var runing:Boolean = false;
 
		private var blurPoint:Point = new Point();
		private var blurFilter:BlurFilter = new BlurFilter(2, 2, 2);
 
		private var time:uint = 0;
		public function Main() {
			super();
			addChild(bitmap);
			//bitmapData.fillRect(new Rectangle(0, 0, 200, 200), 0x88FF88);
 
			resetObjects();
 
			pixelArray.sortOn("color");
			for (var i:int = 0; i < l; i++) {
				//trace(pixelArray[i].color);
			}
 
			stage.addEventListener(MouseEvent.CLICK, onClick);
 
		}
 
		private function onClick(e:MouseEvent):void 
		{
 
			if (!runing) {
				addEventListener(Event.ENTER_FRAME, enterFrame);
			}
			else {
				time = 0;
				removeEventListener(Event.ENTER_FRAME, enterFrame);
				resetObjects();
			}
			runing = !runing;
		}
 
		private function resetObjects():void
		{
			pixelArray = getPixelArray(image);
			l = pixelArray.length;
			bitmapData.fillRect(areaRect, 0xFFFFFF);
			var pixel:Pixel;
			for (var i:int = 0; i < l; i++) {
				pixel = pixelArray[i] as Pixel;
				pixel.cdx = Math.floor(Math.random() * xRandomility - xRandomility / 2)/10;
				pixel.cdy = -Math.round(Math.random() * yRandomility + yRandomility / 2)/10;
 
				pixel.dx = friction;
				pixel.dy = fallSpeed;
				pixel.x += m.tx;
				pixel.y += m.ty;
			}
 
			bitmapData.draw(image, m);
		}
 
		private function enterFrame(e:Event):void
		{
			var dx:Number;
			var dy:Number;
 
			var fx:Number;
			var fy:Number;
			var color:uint;
			var i:int;
			var j:int;
			var dist:int;
			var angle:uint;
 
 
			bitmapData.fillRect(areaRect, 0xFFFFFF);
 
			for (i=0; i < l; i ++) {
					var pixel:Pixel = pixelArray[i];
 
 
					//if (time < 30)
					//{
						pixel.cdx *= pixel.dx;
						pixel.cdy += pixel.dy;
 
 
						color = pixel.color;
					//}
					//else {
						//var t:Number = Math.atan2(h/2-mouseY,w/2 - mouseX);
						//pixel.cdx += Math.cos((pixel.x-mouseX)/(pixel.x-mouseX)) * pixel.dx;
						//pixel.cdy += Math.sin((pixel.y-mouseY)/(pixel.y-pixel.x)) * pixel.dy;
 
						//pixel.cdx = Math.sin(time/20)*2;
						//pixel.cdy = Math.cos(time/20)*2;
						//pixel.cdy = (h/2-mouseY)/100;
					//}
 
					if (pixel.x > w || pixel.x<0) pixel.cdx *= -1;
					if (pixel.y > h || pixel.y<0) pixel.cdy *= -1;
					pixel.x += pixel.cdx;
					pixel.y += pixel.cdy;
					bitmapData.setPixel32(pixel.x , pixel.y, color);
 
			}
 
			time++;
			bitmapData.applyFilter(bitmapData, areaRect, blurPoint, blurFilter);
		}
 
		private function getPixelArray(bmpData:BitmapData):Array {
			var arr:Array = [];
			var li:int = bmpData.width;
			var lj:int = bmpData.height;
			var col:uint;
			for (var i:int = 0; i < li; i++) {
				for (var j:int = 0; j < li; j++) {
					col = bmpData.getPixel32(i, j);
					if (col) arr.push(new Pixel(i, j, col));
				}
			}
			return arr;
		}
 
	}
 
}
Код AS3:
package 
{
 
	/**
	 * @author FluFme
	 */
 
	public class Pixel
	{
		public var x:int;
		public var y:int;
		public var cdy:Number=0;
		public var cdx:Number=0;
		public var dx:Number;
		public var dy:Number;
		public var color:uint;
		public function Pixel(_x:int, _y:int, _color:uint) {
			x = _x;
			y = _y;
			color = _color;
		}
	}
 
}
Вложения
Тип файла: swf PixelEffect.swf (3.3 Кб, 112 просмотров)

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

Теги
эффект

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

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


 


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


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