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

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

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

Регистрация: Aug 2003
Адрес: Санкт-Петербург
Сообщений: 246
Отправить сообщение для Crash512 с помощью Skype™
Вот написал эффектик с использованием частиц.. В роли частиц у меня отрисованные программно векторные кружки. Подскажите, может возможно оптимизировать скорость этого эффекта при помощи BitMap класса?.. Я не работал с ним особо...

Приложил исходник в зипе. Просто кликаешь мышкой на экран, и из мышки взрываются 500 частиц, оседая на рамке экрана.

Вот не знаю... Зипы боятся качать?.. Я бы мог выложить по файлам "*.fla" и "*.as", но такой формат прикреплять нельзя...=(
Вложения
Тип файла: zip Kinematic.zip (6.4 Кб, 148 просмотров)


Последний раз редактировалось etc; 04.09.2008 в 16:23.
Старый 04.09.2008, 16:17
ign вне форума Посмотреть профиль Отправить личное сообщение для ign Найти все сообщения от ign
  № 2  
Ответить с цитированием
ign
 
Аватар для ign

Регистрация: Jan 2008
Сообщений: 36
Не знаю, что ты собрался делать с помощью класса Bitmap.
Единственное, что могу предположить, это сфотографировать все кадры твоего взрыва. А потом сменять битмапы. Но такое кол-во битмап загрузит всю оперативку и производительности из этого ты не получишь.


А теперь методы, с помощью которых можно увеличить производительность:

Стандартный класс Tween сам по себе не очень производительный, советую использовать какой-нибудь иной, например Caurina Tweener.

Пусть 1 Экземпляр класса "Твинер" управляет всеми твоими частицами.
(т.е. просто гоняет число от 0 до 1) А ты на прогресс меняешь координаты всем частицам в цикле.

Так же, когда ты убираешь частицы со сцены, на событие mouseDown, частицы продолжают вычислять свое движение. Поэтому нужно сделать для них метод destroy() внутри которого перестать вычислять новые кординаты и отписаться от enterFrame..

Вообщем флеш способен на многое, если правильно писать код

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

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Сделайте одну обработку Event.ENTER_FRAME в Document class'е, в ней перебирайте частицы.

Если делать с помощью BitmapData, достаточно иметь один экземпляр частицы, который постоянно отрисовывать, меняя только координаты в цикле.
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 04.09.2008, 17:08
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 4  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
что-то типа такого?
Код:
package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.BlurFilter;
	import flash.geom.Point;

	public class particleTest extends Sprite {
		
		private const blurFilter:BlurFilter = new BlurFilter( 2, 2, 2 );
		private const NUM_PARTICLES:Number = 1000;
		
		public function particleTest() {
			super.stage.addEventListener(MouseEvent.CLICK, this.handler_mouseClick);
		}
		
		private var _particles:Array;
		
		private var _renderScreen:BitmapData;
		
		private function init(x:Number, y:Number):void {
			this._particles = new Array();
			for(var i:int = 0; i < this.NUM_PARTICLES; i++) {
				this._particles.push(new Particle(x, y, Math.random()*10-5, Math.random()*10-9, i));
			}
			if(this._renderScreen) this._renderScreen.dispose();
			
			this._renderScreen = new BitmapData( super.stage.stageWidth, super.stage.stageHeight, true, 0 );
			super.addChild(new Bitmap(this._renderScreen));
			
			super.addEventListener(Event.ENTER_FRAME, this.handler_enterFrame);
		}
		
		private function handler_mouseClick(event:MouseEvent):void {
			this.init(super.stage.mouseX, super.stage.mouseY);
		}
		
		private function handler_enterFrame(event:Event):void {
			this._renderScreen.lock();
			
			for each (var p:Particle in this._particles) {
				this._renderScreen.setPixel32(p.sx, p.sy, 0xFFFF00FF);
				p.sx += p.tx;
				p.sy += p.ty;
				p.tx *= .99;
				p.ty += .3;
				if(p.sy > super.stage.stageHeight) this._particles.splice(p.id, 1);
			}
			
			this._renderScreen.applyFilter( this._renderScreen, this._renderScreen.rect, new Point(), this.blurFilter );			
			this._renderScreen.unlock();
		}
	}
}

internal class Particle	{
	public var sx: Number;
	public var sy: Number;
	public var tx: Number;
	public var ty: Number;
	public var id:int;
	
	public function Particle( sx: Number, sy: Number, tx:Number, ty:Number, id:int) {
		this.sx = sx;
		this.sy = sy;
		this.tx = tx;
		this.ty = ty;
		this.id = id;
	}
}
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...


Последний раз редактировалось divinus; 04.09.2008 в 17:10.
Старый 04.09.2008, 18:30
Crash512 вне форума Посмотреть профиль Отправить личное сообщение для Crash512 Найти все сообщения от Crash512
  № 5  
Ответить с цитированием
Crash512
 
Аватар для Crash512

Регистрация: Aug 2003
Адрес: Санкт-Петербург
Сообщений: 246
Отправить сообщение для Crash512 с помощью Skype™
Вот только divinus меня понял... Спасибо за пример=)

Старый 05.09.2008, 04:13
ign вне форума Посмотреть профиль Отправить личное сообщение для ign Найти все сообщения от ign
  № 6  
Ответить с цитированием
ign
 
Аватар для ign

Регистрация: Jan 2008
Сообщений: 36
2divinus

super.stage.addEventListener(MouseEvent.CLICK, this.handler_mouseClick);

почему не просто stage ?

Старый 05.09.2008, 12:45
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 7  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
2ign, привычка.
И кстати
Цитата:
Пусть 1 Экземпляр класса "Твинер" управляет всеми твоими частицами.
(т.е. просто гоняет число от 0 до 1) А ты на прогресс меняешь координаты всем частицам в цикле.
а смысл вообще использовать tweener?
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...


Последний раз редактировалось divinus; 05.09.2008 в 12:48.
Старый 05.09.2008, 14:20
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от ign Посмотреть сообщение
почему не просто stage ?
Потому что это будет однозначно ссылка на stage, а не на возможно переопределенный геттер stage, который может возвратить что угодно.

Старый 05.09.2008, 17:16
ign вне форума Посмотреть профиль Отправить личное сообщение для ign Найти все сообщения от ign
  № 9  
Ответить с цитированием
ign
 
Аватар для ign

Регистрация: Jan 2008
Сообщений: 36
Цитата:
Сообщение от divinus Посмотреть сообщение
И кстати

а смысл вообще использовать tweener?
Мне казалось, ему нужно нелинейное движение.

2__etc
переопределение геттера stage, это конечно круто
Причем переопределение должно быть в этом же классе.

Старый 05.09.2008, 17:19
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от ign Посмотреть сообщение
Причем переопределение должно быть в этом же классе.
Это почему? Он может быть переопределен и в наследниках. Мы же себя заранее ограждаем от возможной некорретной работы в будущем, используя super.

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

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

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


 


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


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