Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Корректное удаление Sprite (http://www.flasher.ru/forum/showthread.php?t=173728)

Varlamov_AS 10.01.2012 12:56

Корректное удаление Sprite
 
Доброго времени суток.
Ситуация такая. Есть собственный CustomSprite (расширенный Sprite). На нем анимация из набора Bitmap'oв.
При удалении спрайта следующим образом:
Код AS3:

           while (tempUIComp.numChildren > 0) {
                while (Sprite(tempUIComp.getChildAt(0)).numChildren > 0) {
                    Bitmap(Sprite(tempUIComp.getChildAt(0)).getChildAt(0)).bitmapData.dispose();
                    Sprite(tempUIComp.getChildAt(0)).removeChildAt(0);
                }
                tempUIComp.removeChildAt(0);
            }

В области прорисовки плеера остаются контуры прорисовки анимации (т.е. как я понимаю память не освобождается). И анимация продолжается, т.е. контуры движутся.

Посоветуйте как правильно его удалять и освобождать память.

etc 10.01.2012 13:16

Что, этот «код» ещё и работает?

Varlamov_AS 10.01.2012 13:29

А можно подробнее? Что неправильно?

etc 10.01.2012 13:35

Этот код ужасен своим безумством. Надо ещё строчек tempUIComp.getChildAt(0)).getChildAt(0) добавить, чтобы вообще нельзя было понять, что происходит.

Varlamov_AS 10.01.2012 14:12

То есть, по-вашему, так все проще и понятнее?
Код AS3:

            var tempNumChildren:uint = _tempUIComp.numChildren;
            var tempSpriteNumChildren:uint;
            var tempObject:Object;
            var tempBitmapObject:Object;
 
            while (tempNumChildren > 0) {
                tempObject = _tempUIComp.getChildAt(0);
                tempSpriteNumChildren = Sprite(tempObject).numChildren;
 
                while (tempSpriteNumChildren > 0) {
                    tempBitmapObject = Sprite(tempObject).getChildAt(0);
                    Bitmap(tempBitmapObject).bitmapData.dispose();
                    Sprite(tempObject).removeChildAt(0);
                    tempSpriteNumChildren--;
                }
 
                _tempUIComp.removeChildAt(0);
                tempNumChildren--;
            }

И по существу(про корректное удаление Sprite) так ничего и не ответили...

etc 10.01.2012 14:22

А по существу при таком безумном коде ответить невозможно.
И да, понятней не стало. Почему вы так уверены, что там на нулевой глубине обязательно будет битмап и больше ничего?

Varlamov_AS 10.01.2012 14:34

Потому что я использую свой CustomSprite, в котором только Bitmap'ы, которые я добавляю программно (их n-ое количество).
Кроме изображений, я ничего туда не добавляю.

GBee 10.01.2012 14:50

Если используете свой CustomSprite, то и "спрячьте" в него удаление


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

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