![]() |
"for" сильно тормозит при создание 10.000 объектов
Пытался сделать - скажем так - звездное небо.
Для того, чтоб множество векторных объектов не тормозили при движение, решил не выводить на экран объект содержащий их, а перегонять через BitmapData необходумую часть перенося ее в другой "Мувик". Всебы хорошо, строится небо, перегонятеся нужный bitmap кусок, НО... При конструирование 10.000 простых квадратиков, флеш сильно подвисает. (просто в процессе их создания) А ежели выставить 100.000 звезд то и вовсе выпадает собщение о прекращение кода. Можно ли как-то ускорить процесс создания не разбивая на куски создание "рэндомной вселенной" ? На всякий случай приведу кусок своего кода с функцией конструирования. Код AS3:
Если закоменчиваю объекты и подставляю простейшее забитие координат в массив, то работает конечно пошустрей. Но если ставлю число 1.000.000 то тоже довольно-таки сильно тормазит, а при 10.000.000 вылетает. Неужели даже координаты более миллиона объектов записать не удастся? Ведь есть нереально обширные проекты в которых еще больше объектов встречается не говоря о элементарных координатах... |
Я может сейчас глупость спрошу, но все-таки.
А зачем так много звезд? Т.е. вот у меня разрешение экрана 1920 на 1080. Итого - 2.073.600 точек на весь экран. Если предположить, что одна звездочка - это одна точка, значит, при их количестве в 1.000.000 у меня будет половина экрана - белым, верно?.. |
Вот как в воду глядел когда писал про космос и звезды )))
Просто так саму идею пояснить удобней было. А звезды не означают пиксели - допустим у меня это квадратики 10х10 в которых есть еще по нескольку квадратиков 1х1 и они не все сразу в экран вмещаются, а уходят далеко за грани. И вот всю эту "кухню" необходимо рэндомно разбросать (а не достраивать) чтоб изначально было известно где и какой объект находится, а также будет необходимость в движение и зумирование. Огромное спасибо за расчеты, сожалею что вы на них потратили свое время ) |
А вообще, рисуйте на Bitmap.
Будет быстрее через setPixel. |
Есть объекты, хорошо, допустим не квадратики а целые картинки или векторные кривые.
Речь сейчас не о них а о главном вопросе темы... Добавлено через 52 секунды "for" сильно тормозит при создание 10.000 объектов Можно ли как-то ускорить процесс создания не разбивая на куски создание "рэндомной вселенной" ? |
Цитата:
Можешь попробовать "асинхронно" (разбить цикл на маленькие циклы и повторять каждый enterFrame), но это врядли чем-то поможет. Хотя, может помочь, если сделать так: Нарисовал нужный кусок -> перерисовал в bitmapData -> удалил кусок, оставил bitmapData -> ожидание след. кадра для отрисовки след. куска. |
Ну вот про это и спрашиваю, значит For ничем ускорить нельзя и While будет работать на сколько понимаю еще дольше.
Значит необходимо искать лишь другие пути решения и разбивать на куски? |
Цитата:
Цитата:
|
Цитата:
Отдельно модель мира, отдельно представление части ее на экране (активного сегмента). По мере необходимости дорисовываются необходимые сегменты и производится сдвиг в нужном направлении, ненужные - чистятся. Задача, на самом деле, не такая тривиальная, как выглядит, но решаемая (врочем, сейчас кто-нибудь скажет, что это элементарно :) ). ЗЫ. Но что-то меня число 100 тысяч все равно пугает. |
Да вы смеетесь. на 10 000 итераций основного цикла (каждый раз создание объекта и добавление его в контейнер) сверху 25 созданий+добавлений во внутренних циклах. 260 000 действий не самых быстрых. а вы хотите ещё на 2 порядка поднять?!
|
| Часовой пояс GMT +4, время: 15:11. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.