Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление объектов из массива и со stage (http://www.flasher.ru/forum/showthread.php?t=123171)

Tiberian 26.03.2009 11:24

Удаление объектов из массива и со stage
 
Есть массив объектов (MovieClip). В цикле проверяю, не истекло ли "время жизни" объекта, и, если это так, хочу удалить его из массива и со сцены.

Код AS3:

                        for (var i:int = 0; i < bullets.length; i++)
                        {
                                if (bullets[i] is bullet)
                                {
                                        var b:bullet = bullets[i];
                                        b.x += b.speed;
                                        b.lifepoints--;
 
                                        if (b.lifepoints <= 0) delete bullets[i];
 
                                }
                        }

При этом МувиКлипы со сцены не исчезают. Приходится убирать их, перебирая всех Child-ов:

Код AS3:

                        for (var j:int = 0; j < this.numChildren; j++)
                        {
                                var mc = this.getChildAt(j);
 
                                if (mc is bullet)
                                {
                                        if ((mc as bullet).lifepoints <= 0) removeChild(mc);
                                }
                        }

Подскажите вариант, как сделать это "красиво", желательно, в одном цикле. Да и массив с пустыми ссылками не есть хорошо...

BlooDHounD 26.03.2009 11:33

Код AS3:

if (b.lifepoints <= 0) {
        delete bullets[i];
        removeChild( bullets[i] as bullet );
}

не?

Tiberian 26.03.2009 11:36

Не... The supplied DisplayObject must be a child of the caller. Пробовал...

mre 26.03.2009 11:38

Код AS3:

var i:int;
var len:int = bullets.length;
var b:bullet;
for (i = 0; i < len; i++)
{
    b = bullets[i] as bullet;
    if (b != null)
    {
        b.x += b.speed;
        b.lifepoints--;
        if (b.lifepoints <= 0)
        {
            bullets[i] = null;
            if (contains(b)) removeChild(b);
        }
    }
}


Tiberian 26.03.2009 12:30

mre, спасибо =)


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

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