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

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

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

Регистрация: Jan 2011
Сообщений: 49
По умолчанию как избежать утечки памяти

Есть красивый эффект, но жрет память сильно и через некоторое время флеш начинает притормаживать.
Как освобождать память от динамических объектов которые уже не нужны?

Привожу код:

Код AS3:
package  
{
	import com.greensock.*;
	import com.greensock.easing.*;
 
	import flash.display.*;
	import flash.events.*;
	import flash.geom.Rectangle;
	import flash.media.*;
	import flash.net.*;
	import flash.system.*;
	import flash.text.*;
	import flash.utils.*;
 
	public class test_star extends Sprite
	{
 
 
		public function test_star() 
		{
			var currentcolor:uint = 0xffffff;
 
			var timer_newstar:Timer = new Timer(10,0);
			var timer_newcolor:Timer = new Timer(500,0);
 
			timer_newstar.addEventListener(TimerEvent.TIMER,f_newstar);
			timer_newcolor.addEventListener(TimerEvent.TIMER,f_newcolor);
 
			timer_newstar.start();
			timer_newcolor.start();
 
 
 
			function f_newcolor (event:TimerEvent):void
			{
				currentcolor = Math.random() *  0xffffff;
				TweenMax.to(class_img_star, 0.2, {tint: currentcolor});
			}
 
 
 
			function f_newstar (event:TimerEvent):void
			{
				var newstar:MovieClip = new class_img_star();
 
				newstar.x = Math.random() * 550;
				newstar.y = Math.random() * 400;
 
				var targetX:Number = newstar.x + Math.random() * 10;  
				var targetY:Number = newstar.y + Math.random() * 10; 
				var targetRotation:Number = Math.random() * 360 - 180;
 
				addChild(newstar);
 
				TweenMax.to(newstar, 3, {alpha: 0, scaleX: 3, scaleY: 3, tint: currentcolor});  
				TweenMax.to(newstar, 3, {rotation: targetRotation, x: targetX, y: targetY});  
				TweenMax.to(newstar, 3, {blurFilter:{blurX:3, blurY:3}, onComplete: removeStar});  
 
 
 
				function removeStar():void 
				{  
					removeChild(newstar);  
					newstar = null;
 
				}   
 
 
 
			}
 
 
		}
 
	}
 
}
Как удалять объекты newstar из памяти?

Добавлено через 54 минуты
покапался в ранних постах, законченные решения отсутствуют.
MemoryController, GC - не дают нужного эффекта.
они очишают память при её критичном заполнении.

а нужно: создался объект - отработал - удалился из памяти

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
1 - уберите вложенные функции
2 - твины подписывайте на окончание анимации и удаляйте целевой объект, если больше не нужен
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 24.02.2011, 22:24
Alexd21 вне форума Посмотреть профиль Отправить личное сообщение для Alexd21 Найти все сообщения от Alexd21
  № 3  
Ответить с цитированием
Alexd21

Регистрация: Jan 2011
Сообщений: 49
Цитата:
Сообщение от cleptoman Посмотреть сообщение
1 - уберите вложенные функции
2 - твины подписывайте на окончание анимации и удаляйте целевой объект, если больше не нужен
1 - понятно
2- не очнь, если можно , как это сделать?

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
перефразирую...задайте метод, который будет идентифицировать объекты как ненужные. навскидку на ум приходит какой-нибудь хендлер окончания анимации. поймали событие, целевой твин получили, целевой объект получили, убили. применительно к TweenMax не знаю -не щупал. но, думаю, в целом мысль понятна. это - необязательно твин, момент ненужности объекта может быть совсем другим в вашем контексте.
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
У TweenMax это onComplete: someFunction внутри params.

Старый 24.02.2011, 22:51
Alexd21 вне форума Посмотреть профиль Отправить личное сообщение для Alexd21 Найти все сообщения от Alexd21
  № 6  
Ответить с цитированием
Alexd21

Регистрация: Jan 2011
Сообщений: 49
Цитата:
Сообщение от cleptoman Посмотреть сообщение
перефразирую...задайте метод, который будет идентифицировать объекты как ненужные. навскидку на ум приходит какой-нибудь хендлер окончания анимации. поймали событие, целевой твин получили, целевой объект получили, убили. применительно к TweenMax не знаю -не щупал. но, думаю, в целом мысль понятна. это - необязательно твин, момент ненужности объекта может быть совсем другим в вашем контексте.
в общем мысль ясно, но вся веселуха начинается на слове "убили".

Какой командой на as3 "убивается" ненужный объект?
delete - удаляет лишь свойства объектов, но не сами объекты.
"объект" = null - память тоже не освобождает


Последний раз редактировалось Alexd21; 24.02.2011 в 22:54.
Старый 24.02.2011, 23:08
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 7  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
removeChild(объект)
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
А никак не освободить память конкретно Вам. Заnullить все ссылки, а дальше как повезёт.

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

Регистрация: Jan 2011
Сообщений: 49
Цитата:
Сообщение от TanaTiX Посмотреть сообщение
removeChild(объект)
если бы....
removeChild(объект) - удаляет объект только со сцены, в памяти он остается, addChild(объект) - легко добавит его обратно

можете включить профилер, если не верите.

Старый 24.02.2011, 23:24
petyar вне форума Посмотреть профиль Отправить личное сообщение для petyar Найти все сообщения от petyar
  № 10  
Ответить с цитированием
petyar

Регистрация: Sep 2005
Сообщений: 106
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
А никак не освободить память конкретно Вам. Заnullить все ссылки, а дальше как повезёт.
По логике GC должен убить объект после зануления всех ссылок же?

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

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

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


 


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


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