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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2010, 16:35
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 1  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
Question Эффект "уничтожения" при клике

всем привет

Делаю игру с физикой, при нажатии на некоторые элементы они удаляются, сейчас они просто исчезают, а я хочу чтобы они это делали красиво, нужно реализовать эффект уничтожения (точнее нужно чтоб спрайт какбэ разваливался на части и исчез постепенно) мувиклипа, всё это дело нужно навесить на собитие при клике. Вот, буду рад любой помощи по данному вопросу (Отдельно эффект рисовать для каждого спрайта не вариант, так как объектов очень много и все разных размеров и пр.).. заранее спасибо

Старый 16.01.2010, 20:18
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 2  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
У Вас проблема "развалить" объект и навесить событие на клик одновременно? Думаю, проблемы несовместимы по сложности
Вообще, развалить можно нарезав на куски с помощью масок, не сильно реалистично, но однозначно лучше, чем просто "убить" мувик.

Старый 16.01.2010, 20:37
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 3  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
Нужно всё это дело программно сделать, чтобы мувик какбэ рассыпался, для каждого анимацию делать не вариант ибо их кучи (разных естественно), не шибко важно реалистично или нет, главное чтоб смотрелось нормально. Чтот совсем видимо не помогут

Старый 16.01.2010, 20:45
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 4  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
По умолчанию план

Цитата:
Сообщение от Scorp2008 Посмотреть сообщение
Нужно всё это дело программно сделать, чтобы мувик какбэ рассыпался, для каждого анимацию делать не вариант ибо их кучи (разных естественно), не шибко важно реалистично или нет, главное чтоб смотрелось нормально. Чтот совсем видимо не помогут
Ну я и говорю маской сделать программно, план:
1. режете объект на кусочки:
1.1. делаете N копий объекта. Просто создайте Bitmap'ы, в них отрисуйте картину объекта;
1.2. рисуете N треугольников (на Shape), хаотично, но лучше чтобы четко - треугольник к треугольнику. Это будут какбэ (как Вы говорите ) маски;
1.3. применяете каждой копии маску, получается кусочек объекта;
2. анимируете каждый кусочек, например, плавное движение от центра и в прозрачность.
3. удаляете все кусочки из памяти (BitmapData.dispose())

Способ ресурсоемкий, но работать будет.

Старый 16.01.2010, 21:22
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 5  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
План хороший, годный. Спасибо. Но так как AS3 я учу относительно недавно, то и проблем тут с этим планом у меня достаточно. Буду пробовать, но если вдруг ещё кто что знает по теме - не стесняйтесь, выкладывайте

Старый 17.01.2010, 16:33
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 6  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
вариант номер 2:
каждый мувик, который мы будем колбасить, при создании будет состоять из Shape-ов. Собранные в кучу методом myMovieClip_01.addChild(myShape_09) будут смотреться как то, что вам нужно.
Затем, када надо убить конкретный мувик, мы берем все его чилды
childobj=getChildAt(j), где j = 1..myMovieClip_01.numChildren и делаем addChild(childobj). Что по сути означает, что objchild (маленький Shape из состава убиваемого мувика) перестает быть его чилдом и становится чилдом сцены. Визуально (если скорректирвоать координаты x, y) ничего не будет заметно на этом шаге. После этого можно красиво с помощью Math.random() двигать шейпы в разные стороны с разной скоростью. Пока они не выйдут за пределы сцены где их физически уничтожить....

Старый 17.01.2010, 16:51
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 7  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Цитата:
Сообщение от Crenth Посмотреть сообщение
вариант номер 2:
каждый мувик, который мы будем колбасить, при создании будет состоять из Shape-ов
Не универсально, ибо мувики всякие бывают. Зависит от случая.

Старый 17.01.2010, 18:00
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 8  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
вполне универсально, поскольку поставлена задача делать все программно.
генерить мувики можно программно. в соответствии с каким-либо законом (формулой), описывающей мувик.
и можно несколько методов разрушения в классе описать.

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

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 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, время: 16:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
эффект

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

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


 


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


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