|
|
|||||
Регистрация: Aug 2012
Сообщений: 23
|
много много объектов на сцене
Здравствуйте, положим мне нужно сверстать огромную сцену (размером скажеи 1М на 1М пикселей и столько же объектов). Ну захотелось мне сделать игровой мир бесконечный почти. Ну само собой возникает вопрос производительности т.к. скажем старлинг пробегаясь по дереву пробежится по нему мульён раз. А хотелось бы пробегаться только по тем объектам что во вьюпорте. Вопрос - сколько раз пробежиться старлинг своим render если на сцене 2 000 000 объектов? И второй - как рендерить только то что в зоне видимости и без пробегания всего списка детей?
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
вроде даже у нативного дисплей-листа есть обрезание границами вьюпорта, думаю в старлинге должно быть нечто подобное
Цитата:
|
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Старлинг рендерит все, в т.ч то что находится вне вьювпорта.
Да, с q-tree вариант хороший, если все объекты не находятся в движении. а так лучше делать свой qt на каждый слой. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Регистрация: Aug 2012
Сообщений: 23
|
тут вопрос широкий. по старлингу вот мои доказательства
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 минут ВСЕМ СПАСИБО! |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
hasVisibleArea - это проверка visible|scale|alpha
Даниэль писал что проверка габаритов на пререндере создает больший оверхед, чем отправка на карту всего подряд) |
|
|||||
Регистрация: Aug 2012
Сообщений: 23
|
а это код из 1.8 из междупрочим) http://wiki.starling-framework.org/e...quadtreesprite а это то что нужно)
|
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Да, там еще есть либа разбивающее один displayObjectContainer на слои, и контейнер собирающий их в порядке слоев, а не painterDraw. Думаю в твоем случае есть смысл их объеденить)
|
|
|||||
Всегда можно найти способ, добавлять минум объектов в определенный этап времени. 2000К объектов на сцене - вот где настоящий оверхэд.
Деревья квадрантов, очень хороший вариант. Но можно и свой гибрид придумать. Все зависит от задач. Мне доводилось делать очень большие карты, и я долго ломал голову над реализацией. В итоге вопрос все-таки решил. И у меня было что-то типа комбинации деревьев квадрантов для расположения динамических объектов. И простого BitmapData#draw() с выбором нужного региона для фона
__________________
Ко мне можно и нужно обращаться на ты) |
Часовой пояс GMT +4, время: 15:33. |
|
« Предыдущая тема | Следующая тема » |
|
|