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

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

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию Утечка

Доброго время суток.
На ранних этапах обнаружил утечку, при вызове метода show() в представленном ниже классе убегает примерно 3Kb (за каждый повторяющий вызов функции методом levelup и leveldown), это видно с диспетчера задач. Помогите с оптимизацией, или посмотрите что может так.

Код AS3:
package  src {
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import gs.TweenLite;
	import gs.easing.* 
	import flash.filters.BlurFilter;
 
	public class photoTree extends Sprite {
 
		public var me:Boolean = false;
		public var language:Object;
 
		private var tree:Array;
		private var sector:Array = new Array();
		private var back:Array = new Array();
		private var turn:Array = new Array();
 
		private var smallSize:Number = 105;
		private var bigSize:Number = 200;
 
 
 
		public function photoTree() {
 
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE,init);
		}
 
		private function init(e:Event=null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			if (tree)
			{
				back.push("tree");
				sector = tree;
				x = 100;
				y = 90;
				_back.visible = false;
				_home.visible = false;
 
				_back.addEventListener(MouseEvent.MOUSE_UP,levelup);
				_home.addEventListener(MouseEvent.MOUSE_UP,levelup);
 
				var blur = new BlurFilter(2, 2, 2);
 				_lines.filters = [blur];
 
				if (me)
				{
					_favorites.visible = false;
					_like.visible = false;
					_gift.visible = false;
				} 
 
				for ( var i=0; i<=5; i++)
				{
					this['cast'+i]._edit.visible = me;
					this['cast'+i]._edit._text.text = language.edit;
					this['cast'+i]._over.addEventListener(MouseEvent.ROLL_OVER,showAlert);
					this['cast'+i]._over.addEventListener(MouseEvent.ROLL_OUT,hideAlert);
					this['cast'+i]._over.addEventListener(MouseEvent.MOUSE_UP,leveldown);
 
				}
				show();
			}
		}
		private function levelup(e:MouseEvent):void
		{
			back.pop();
			sector = this[back.join(".")];
 
			show();
		}
 
 
 
		private function leveldown(e:MouseEvent):void
		{
			var len:uint = 0;
			for (var item in sector[e.target.parent.name]) len++;
 
			if (len>3)	
			{
				back.push(e.target.parent.name);
				sector = sector[e.target.parent.name];
				show();
			}
		}
 
		public function reset():void
		{
			trace('reset photoTree');
			for ( var i=0; i<=5; i++)
			{
 
				this['cast'+i]._over.removeEventListener(MouseEvent.ROLL_OVER,showAlert);
				this['cast'+i]._over.removeEventListener(MouseEvent.ROLL_OUT,hideAlert);
				this['cast'+i]._over.removeEventListener(MouseEvent.MOUSE_UP,leveldown);
			}
		}
 
		private function alphaMover(e:Event):void
		{
 
			if ((e.target.astep>0 && e.target.alpha>=1) || (e.target.astep<0 && e.target.alpha<=0))
				e.target.removeEventListener(Event.ENTER_FRAME,alphaMover);
			else e.target.alpha+=e.target.astep;
 
		}
 
		private function showAlert(e:MouseEvent):void
		{
			e.target.parent.parent["alert_"+e.target.parent.name].astep = 0.05;
			e.target.parent.parent["alert_"+e.target.parent.name].addEventListener(Event.ENTER_FRAME,alphaMover);
		}
 
		private function hideAlert(e:MouseEvent):void
		{
			e.target.parent.parent["alert_"+e.target.parent.name].astep = -0.1;
			e.target.parent.parent["alert_"+e.target.parent.name].addEventListener(Event.ENTER_FRAME,alphaMover);
		}
 
		public function set content(data:Array):void
		{
			tree = data;
			if (stage) init();
		}
 
		private function resize(e:Event):void
		{
			if(e.target.width>0)
			{
				e.target.removeEventListener(Event.ENTER_FRAME, resize);
 
				var size = (e.target.parent.parent.name=='photo') ? bigSize : smallSize;
 
				if(e.target.width!=size) e.target.width = e.target.height = size;
 
				if (turn.length!=0) loading();
			}
		}
 
		private function loading():void
		{
			var loader:Loader = new Loader();
			loader.load(new URLRequest(turn[0]))
 
			this[turn[1]].photo.img.addChild(loader);
			this[turn[1]].photo.img.addEventListener(Event.ENTER_FRAME, resize);
 
			turn.shift();
			turn.shift();
		}
 
		private function show():void
		{					
 
			_back.visible = (back.length>=2) ? true : false;
			_home.visible = (back.length>2) ? true : false;
 
			_head.text = sector.head;
 
			turn[0] = sector.photo;
			turn[1] = 'photo';
 
			for ( var i = 0; i < 6; i++ )
			{
				turn[turn.length] = sector['cast'+i].photo;
				turn[turn.length] = 'cast'+i;
 
				this['alert_cast'+i]._head.text = sector['cast'+i].head;
				this['alert_cast'+i]._body.text = sector['cast'+i].comment;
				this['alert_cast'+i]._help.text = language['help'];
 
				/*var X:Number = this['cast'+i].x;
				var Y:Number = this['cast'+i].y;
 
				this['cast'+i].x = 208;
				this['cast'+i].y = 94;
 
				this['cast'+i].alpha = 0;
				this['cast'+i]['_cast'+i].alpha = 1;
				TweenLite.to(this['cast'+i], 1, {x:X, y:Y, ease:Back.easeInOut, alpha:1});*/
			}
			loading();
		}
	}
}
Добавлено через 19 минут
Спасибо уже сам нашёл))

нужно было сделать так

Код AS3:
private function loading():void
		{
			var loader:Loader = new Loader();
			loader.load(new URLRequest(turn[0]))
 
 
			while(this[turn[1]].photo.img.numChildren) this[turn[1]].photo.img.removeChildAt(0);
 
			this[turn[1]].photo.img.addChild(loader);
			this[turn[1]].photo.img.addEventListener(Event.ENTER_FRAME, resize);
 
			turn.shift();
			turn.shift();
		}
__________________
return this...

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

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

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


 


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


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