![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2011
Сообщений: 49
|
Есть красивый эффект, но жрет память сильно и через некоторое время флеш начинает притормаживать.
Как освобождать память от динамических объектов которые уже не нужны? Привожу код: 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; } } } } } Добавлено через 54 минуты покапался в ранних постах, законченные решения отсутствуют. MemoryController, GC - не дают нужного эффекта. они очишают память при её критичном заполнении. а нужно: создался объект - отработал - удалился из памяти |
|
|||||
|
1 - уберите вложенные функции
2 - твины подписывайте на окончание анимации и удаляйте целевой объект, если больше не нужен
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 49
|
Цитата:
2- не очнь, если можно , как это сделать? |
|
|||||
|
перефразирую...задайте метод, который будет идентифицировать объекты как ненужные. навскидку на ум приходит какой-нибудь хендлер окончания анимации. поймали событие, целевой твин получили, целевой объект получили, убили. применительно к TweenMax не знаю -не щупал. но, думаю, в целом мысль понятна. это - необязательно твин, момент ненужности объекта может быть совсем другим в вашем контексте.
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
У TweenMax это onComplete: someFunction внутри params.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 49
|
Цитата:
Какой командой на as3 "убивается" ненужный объект? delete - удаляет лишь свойства объектов, но не сами объекты. "объект" = null - память тоже не освобождает Последний раз редактировалось Alexd21; 24.02.2011 в 22:54. |
|
|||||
|
А никак не освободить память конкретно Вам. Заnullить все ссылки, а дальше как повезёт.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 49
|
если бы....
removeChild(объект) - удаляет объект только со сцены, в памяти он остается, addChild(объект) - легко добавит его обратно ![]() можете включить профилер, если не верите. |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 106
|
По логике GC должен убить объект после зануления всех ссылок же?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|