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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.06.2016, 13:52
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 1  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
По умолчанию много много объектов на сцене

Здравствуйте, положим мне нужно сверстать огромную сцену (размером скажеи 1М на 1М пикселей и столько же объектов). Ну захотелось мне сделать игровой мир бесконечный почти. Ну само собой возникает вопрос производительности т.к. скажем старлинг пробегаясь по дереву пробежится по нему мульён раз. А хотелось бы пробегаться только по тем объектам что во вьюпорте. Вопрос - сколько раз пробежиться старлинг своим render если на сцене 2 000 000 объектов? И второй - как рендерить только то что в зоне видимости и без пробегания всего списка детей?

Старый 15.06.2016, 14:17
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 2  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
вроде даже у нативного дисплей-листа есть обрезание границами вьюпорта, думаю в старлинге должно быть нечто подобное
Цитата:
И второй - как рендерить только то что в зоне видимости и без пробегания всего списка детей?
Хранить детей в quad-tree и обрезать все ненужное чем раньше, тем лучше.Хотя думаю нечто подобное сам fp и так делает.

Старый 15.06.2016, 15:08
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 3  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Старлинг рендерит все, в т.ч то что находится вне вьювпорта.
Да, с q-tree вариант хороший, если все объекты не находятся в движении. а так лучше делать свой qt на каждый слой.

Старый 15.06.2016, 15:20
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 4  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Старлинг рендерит все, в т.ч то что находится вне вьювпорта.
А с чем связано такое решение?Этож дикий overhead можно хапнуть по незнанию.Может обрезание происходит на уровне opengl?

Старый 15.06.2016, 15:30
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 5  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
тут вопрос широкий. по старлингу вот мои доказательства
Код AS3:
public override function render(support:RenderSupport, parentAlpha:Number):void
        {
            var alpha:Number = parentAlpha * this.alpha;
            var numChildren:int = mChildren.length;
            var blendMode:String = support.blendMode;
 
            for (var i:int=0; i<numChildren; ++i)
            {
                var child:DisplayObject = mChildren[i];
 
                if (child.hasVisibleArea)
                {
                    var filter:FragmentFilter = child.filter;
 
                    support.pushMatrix();
                    support.transformMatrix(child);
                    support.blendMode = child.blendMode;
 
                    if (filter) filter.render(child, support, alpha);
                    else        child.render(support, alpha);
 
                    support.blendMode = blendMode;
                    support.popMatrix();
                }
            }
        }
по нативу я исходники не смотрел, но пишут черти что мол прячьте свои спрайты вне сцены. так и пишут.

а за вектор спасибо, буду копать теперь)

Добавлено через 12 минут
ВСЕМ СПАСИБО!

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

Регистрация: Apr 2009
Сообщений: 409
hasVisibleArea - это проверка visible|scale|alpha
Даниэль писал что проверка габаритов на пререндере создает больший оверхед, чем отправка на карту всего подряд)

Старый 15.06.2016, 16:23
iiiusion вне форума Посмотреть профиль Отправить личное сообщение для iiiusion Найти все сообщения от iiiusion
  № 7  
Ответить с цитированием
iiiusion

Регистрация: Aug 2012
Сообщений: 23
а это код из 1.8 из междупрочим) http://wiki.starling-framework.org/e...quadtreesprite а это то что нужно)

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

Регистрация: Apr 2009
Сообщений: 409
Да, там еще есть либа разбивающее один displayObjectContainer на слои, и контейнер собирающий их в порядке слоев, а не painterDraw. Думаю в твоем случае есть смысл их объеденить)

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Всегда можно найти способ, добавлять минум объектов в определенный этап времени. 2000К объектов на сцене - вот где настоящий оверхэд.
Деревья квадрантов, очень хороший вариант. Но можно и свой гибрид придумать. Все зависит от задач. Мне доводилось делать очень большие карты, и я долго ломал голову над реализацией. В итоге вопрос все-таки решил. И у меня было что-то типа комбинации деревьев квадрантов для расположения динамических объектов. И простого BitmapData#draw() с выбором нужного региона для фона
__________________
Ко мне можно и нужно обращаться на ты)

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

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

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


 


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


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