![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1.3 06.03.12]
|
Пытался сделать - скажем так - звездное небо.
Для того, чтоб множество векторных объектов не тормозили при движение, решил не выводить на экран объект содержащий их, а перегонять через BitmapData необходумую часть перенося ее в другой "Мувик". Всебы хорошо, строится небо, перегонятеся нужный bitmap кусок, НО... При конструирование 10.000 простых квадратиков, флеш сильно подвисает. (просто в процессе их создания) А ежели выставить 100.000 звезд то и вовсе выпадает собщение о прекращение кода. Можно ли как-то ускорить процесс создания не разбивая на куски создание "рэндомной вселенной" ? На всякий случай приведу кусок своего кода с функцией конструирования. protected function buildUni():void { var num:Number = 10000; var rand:Number = num/20; var dist:Number = 10; for(var i:Number=0; i<num; i++){ var nSec:BSector = new BSector(); nSec.x = (Math.random()*rand - rand/2) * dist; nSec.y = (Math.random()*rand - rand/2) * dist; container.addChild(nSec); var pid:Number = 0; for(var yy:Number=0; yy<5; yy++){ for(var xx:Number=0; xx<5; xx++){ var nPix:BPix = new BPix(); MovieClip(nPix).gotoAndStop(1); nPix.x = xx - 5; nPix.y = yy - 5; nSec.addChild(nPix); pid++; } } } var res:MovieClip = new MovieClip(); bmd = new BitmapData(100, 80, false, 0); bmd.draw(container); res.graphics.beginBitmapFill(bmd); res.graphics.drawRect(0, 0, 100, 100); res.graphics.endFill(); res.x = 200; uni.addChild(res); //uni.addChild(container); addElement(uni); } Если закоменчиваю объекты и подставляю простейшее забитие координат в массив, то работает конечно пошустрей. Но если ставлю число 1.000.000 то тоже довольно-таки сильно тормазит, а при 10.000.000 вылетает. Неужели даже координаты более миллиона объектов записать не удастся? Ведь есть нереально обширные проекты в которых еще больше объектов встречается не говоря о элементарных координатах...
__________________
http://apa-noua.com/portfolio |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 70
|
Я может сейчас глупость спрошу, но все-таки.
А зачем так много звезд? Т.е. вот у меня разрешение экрана 1920 на 1080. Итого - 2.073.600 точек на весь экран. Если предположить, что одна звездочка - это одна точка, значит, при их количестве в 1.000.000 у меня будет половина экрана - белым, верно?.. |
|
|||||
|
[+1.3 06.03.12]
|
Вот как в воду глядел когда писал про космос и звезды )))
Просто так саму идею пояснить удобней было. А звезды не означают пиксели - допустим у меня это квадратики 10х10 в которых есть еще по нескольку квадратиков 1х1 и они не все сразу в экран вмещаются, а уходят далеко за грани. И вот всю эту "кухню" необходимо рэндомно разбросать (а не достраивать) чтоб изначально было известно где и какой объект находится, а также будет необходимость в движение и зумирование. Огромное спасибо за расчеты, сожалею что вы на них потратили свое время )
__________________
http://apa-noua.com/portfolio |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
А вообще, рисуйте на Bitmap.
Будет быстрее через setPixel. |
|
|||||
|
[+1.3 06.03.12]
|
Есть объекты, хорошо, допустим не квадратики а целые картинки или векторные кривые.
Речь сейчас не о них а о главном вопросе темы... Добавлено через 52 секунды "for" сильно тормозит при создание 10.000 объектов Можно ли как-то ускорить процесс создания не разбивая на куски создание "рэндомной вселенной" ?
__________________
http://apa-noua.com/portfolio |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
Можешь попробовать "асинхронно" (разбить цикл на маленькие циклы и повторять каждый enterFrame), но это врядли чем-то поможет. Хотя, может помочь, если сделать так: Нарисовал нужный кусок -> перерисовал в bitmapData -> удалил кусок, оставил bitmapData -> ожидание след. кадра для отрисовки след. куска. |
|
|||||
|
[+1.3 06.03.12]
|
Ну вот про это и спрашиваю, значит For ничем ускорить нельзя и While будет работать на сколько понимаю еще дольше.
Значит необходимо искать лишь другие пути решения и разбивать на куски?
__________________
http://apa-noua.com/portfolio |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
Отдельно модель мира, отдельно представление части ее на экране (активного сегмента). По мере необходимости дорисовываются необходимые сегменты и производится сдвиг в нужном направлении, ненужные - чистятся. Задача, на самом деле, не такая тривиальная, как выглядит, но решаемая (врочем, сейчас кто-нибудь скажет, что это элементарно ).ЗЫ. Но что-то меня число 100 тысяч все равно пугает. |
|
|||||
|
Регистрация: Feb 2013
Сообщений: 176
|
Да вы смеетесь. на 10 000 итераций основного цикла (каждый раз создание объекта и добавление его в контейнер) сверху 25 созданий+добавлений во внутренних циклах. 260 000 действий не самых быстрых. а вы хотите ещё на 2 порядка поднять?!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 10:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|