Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.03.2013, 00:38
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 1  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
По умолчанию "for" сильно тормозит при создание 10.000 объектов

Пытался сделать - скажем так - звездное небо.
Для того, чтоб множество векторных объектов не тормозили при движение, решил не выводить на экран
объект содержащий их, а перегонять через BitmapData необходумую часть перенося ее в другой "Мувик".

Всебы хорошо, строится небо, перегонятеся нужный bitmap кусок, НО...
При конструирование 10.000 простых квадратиков, флеш сильно подвисает. (просто в процессе их создания)
А ежели выставить 100.000 звезд то и вовсе выпадает собщение о прекращение кода.

Можно ли как-то ускорить процесс создания не разбивая на куски создание "рэндомной вселенной" ?
На всякий случай приведу кусок своего кода с функцией конструирования.

Код AS3:
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

Старый 13.03.2013, 00:54
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 2  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Я может сейчас глупость спрошу, но все-таки.
А зачем так много звезд? Т.е. вот у меня разрешение экрана 1920 на 1080. Итого - 2.073.600 точек на весь экран. Если предположить, что одна звездочка - это одна точка, значит, при их количестве в 1.000.000 у меня будет половина экрана - белым, верно?..

Старый 13.03.2013, 01:04
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 3  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
Вот как в воду глядел когда писал про космос и звезды )))
Просто так саму идею пояснить удобней было.
А звезды не означают пиксели - допустим у меня это квадратики 10х10 в которых есть еще по нескольку квадратиков 1х1 и они не все сразу в экран вмещаются, а уходят далеко за грани.

И вот всю эту "кухню" необходимо рэндомно разбросать (а не достраивать) чтоб изначально было известно где и какой объект находится, а также будет необходимость в движение и зумирование.

Огромное спасибо за расчеты, сожалею что вы на них потратили свое время )
__________________
http://apa-noua.com/portfolio

Старый 13.03.2013, 01:05
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 4  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
А вообще, рисуйте на Bitmap.
Будет быстрее через setPixel.

Старый 13.03.2013, 01:09
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 5  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
Есть объекты, хорошо, допустим не квадратики а целые картинки или векторные кривые.
Речь сейчас не о них а о главном вопросе темы...

Добавлено через 52 секунды
"for" сильно тормозит при создание 10.000 объектов
Можно ли как-то ускорить процесс создания не разбивая на куски создание "рэндомной вселенной" ?
__________________
http://apa-noua.com/portfolio

Старый 13.03.2013, 01:10
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 6  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
Речь сейчас не о них а о главном вопросе темы...
Так зачем тебе столько объектов, если они не уместятся даже в экран 30'?

Можешь попробовать "асинхронно" (разбить цикл на маленькие циклы и повторять каждый enterFrame), но это врядли чем-то поможет.
Хотя, может помочь, если сделать так:
Нарисовал нужный кусок -> перерисовал в bitmapData -> удалил кусок, оставил bitmapData -> ожидание след. кадра для отрисовки след. куска.

Старый 13.03.2013, 01:12
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 7  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
Ну вот про это и спрашиваю, значит For ничем ускорить нельзя и While будет работать на сколько понимаю еще дольше.

Значит необходимо искать лишь другие пути решения и разбивать на куски?
__________________
http://apa-noua.com/portfolio

Старый 13.03.2013, 01:18
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 8  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
Ну вот про это и спрашиваю, значит For ничем ускорить нельзя и While будет работать на сколько понимаю еще дольше.
Нет. While ~ for (их скорость одинакова).

Цитата:
Значит необходимо искать лишь другие пути решения и разбивать на куски?
Да, это очевидно.

Старый 13.03.2013, 01:30
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 9  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
И вот всю эту "кухню" необходимо рэндомно разбросать (а не достраивать) чтоб изначально было известно где и какой объект находится, а также будет необходимость в движение и зумирование.
Собственно, разбросать можно без создания каких-либо объектов вообще.
Отдельно модель мира, отдельно представление части ее на экране (активного сегмента). По мере необходимости дорисовываются необходимые сегменты и производится сдвиг в нужном направлении, ненужные - чистятся. Задача, на самом деле, не такая тривиальная, как выглядит, но решаемая (врочем, сейчас кто-нибудь скажет, что это элементарно ).

ЗЫ. Но что-то меня число 100 тысяч все равно пугает.

Старый 13.03.2013, 01:30
Sync вне форума Посмотреть профиль Отправить личное сообщение для Sync Найти все сообщения от Sync
  № 10  
Ответить с цитированием
Sync
 
Аватар для Sync

Регистрация: Feb 2013
Сообщений: 176
Да вы смеетесь. на 10 000 итераций основного цикла (каждый раз создание объекта и добавление его в контейнер) сверху 25 созданий+добавлений во внутренних циклах. 260 000 действий не самых быстрых. а вы хотите ещё на 2 порядка поднять?!

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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