Форум 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=206272)

a7s1h1 24.01.2014 18:29

посчитать все объекты на сцене
 
Есть ли какой-то способ посчитать количество всех объектов на сцене?
Если представить класс Main как главного родителя, то можно, конечно, посчитать через numChildren его детей, а затем через цикл ещё и внуков. Но ведь нужно получить количество вообще всех объектов, которые добавлены на сцену или на своего родителя через addChild. Как же сделать это, если в отдельно взятый момент мы не можем точно знать количество уровней в иерархии?

(Извините за опечатку в названии темы, как теперь исправить - не знаю)

KBAC 24.01.2014 18:41

Как-нибудь так:

Код AS3:

private function getNumObjects(parent:DisplayObjectContainer):int
{
        var result:int = parent.numChildren;
 
        for (var i:int = 0; i < parent.numChildren; i++)
        {
                var container:DisplayObjectContainer = parent.getChildAt(i) as DisplayObjectContainer;
 
                if (container == null)
                {
                        continue;
                }
 
                result += getNumObjects(container);
        }
 
        return result;
}

и stage в неё передаёте.

samana 24.01.2014 20:06

Ещё лучше не забыть поставить проверку на то, является ли текущий проверяемый объект DisplayObjectContainer-ом. А то ведь parent.numChildren может выдать ошибку.

in4core 25.01.2014 04:17

Цитата:

Ещё лучше не забыть поставить проверку на то, является ли текущий проверяемый объект DisplayObjectContainer-ом. А то ведь parent.numChildren может выдать ошибку.
Неправда. Тут вы ошибаетесь. В данном случае код не скомпилится просто, единственное , если туда передать ЭЛЕМЕНТ массива, тогда да. Но зачем так делать? Нелогично.
Я вот борюсь давно за то, чтобы AS3 - был полностью типизированным, * конечно круто - но для нормальных программных продуктов, оно на хрен не надо. Так же мне не нравится приведение типов из за * массивных данных. Что за фигня, когда ты создаешь метод ( сообщение, принимаемое от сервера )
Код AS3:

private function ( cash:int , serverTime:String )

а получив вместо cash, строку XXX - переведется в 1. Какого?!!! Экспешн должен быть и точка!!!
Я считаю свой код, мягко сказать неидеальным, а точнее ХРЕНОВЫМ , без вопросов. И вот когда, судьба дает мне возможность ждать * - что бы я там не писал, это располагает мое сознание ( да и большинство других людей ) - писать *слабый* код.
Я не хочу совершенствоваться в AS допустим, но и не хочу писать ерунду, мне устраивает то, что я уже знаю, допустим, но если бы я изначально не знал НЕ типизированных массивов и класса * , я бы писал код более организованно и приучался бы к ПРАВИЛЬНОЙ типизации.

Ох... простите, навеяло. Просто эти темы уже задолбали.

Psycho - жду тебя, высказать мне че нить)))

Dukobpa3 25.01.2014 06:11

Цитата:

Я вот борюсь
каким образом?

Добавлено через 5 минут
Можно как-то так сделать, например.
Сделать какой-то свой базовый спрайт и считать все его инстансы на сцене.
Если у вас всё является какими-то вьюхами, то вполне ок вариант.

Isfet 25.01.2014 10:31

можно считать их при создании

caseyryan 25.01.2014 11:11

Цитата:

можно считать их при создании
Ну, не факт ведь, что объект попадет в дисплей лист сразу после создания. Может он туда вообще не попадет

Isfet 25.01.2014 11:41

ну, имелось ввиду при добавлении

samana 25.01.2014 16:30

Цитата:

Сообщение от in4core (Сообщение 1158042)
Неправда. Тут вы ошибаетесь. В данном случае код не скомпилится просто...

Вы правы, сейчас проверил у себя и убедился, что проверку действительно не обязательно делать. Но скомпилироватся коду ничего не помешает, ведь за раннее не известно, какой объект передадут для проверки.

a7s1h1 27.01.2014 14:18

попробую предложенные варианты, всем спасибо!


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

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