Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Утечка (http://www.flasher.ru/forum/showthread.php?t=176790)

AlexCooper 17.03.2012 20:27

Утечка
 
Доброго время суток.
На ранних этапах обнаружил утечку, при вызове метода 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();
                }



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

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