![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Делаю Quadtree для оптимальной отрисовки графических объектов
и коллизий. У меня есть спрайт Level наполненный игровыми объектами, каждый из которых занесен в лист Quadtree. Когда добавляется спрайт Level в список отображения, то всем игровым объектам внутри спрайта я ставлю object.visible = false, т.е. скрываю их. Далее речь пойдет только об отрисове, физику отбросим: В результате я получаю список объектов List, которые попадают в обзор камеры (прямоугольника). Из возвращенного списка List я всем объектам назначаю object.visible = true. Все ок, отображаются только нужные объекты, но далее камера перемещается и те объекты которые были видимы мы их должны скрыть, чтобы они заного прошли проверку Quadtree. Получается так:
private function onEnterFrame(e:Event):void
{
//скрываем все объекты которые были отображены в предыдущей итерации.
for each(var obj:BaseObject in bufOb)
{
obj.visualOb.visible = false;
obj.body.SetAwake(false);
}
bufOb.length = 0;
// quadTree возвращает все нужные объекты r, которые попали в поле видимости камеры
var r:* = quadTree.check(checkRC, e.target.graphics);
//перебираем полученные объекты и показываем их
while (r != null)
{
r.visualOb.visible = true;
//заносим в массив bufOb, чтобы в сл итерации скрыть их до проверки quadTree
bufOb.push(r);
r = r.nextResult;
}
}
запоминать прорисованные объекты и далее перед проверкой quadTree скрывать их. Т.к. иначе камера может переместиться и эти объекты будут отображены, хотя они не попадают в область видимости камеры. Вообще скрывать/показывать объекты это наверно не очень хороший вариант, т.к. если объектов тысячи, то хоть они и крыты но флеш будет тратить на них ресурсы, т.к. они в списке отображения. Если же делать removeChild/addChild, то тут значительно больше работы по возвращению в сцену объекта в нужном положении/состоянии. Хотелось бы отрисовывать объекты через свойство visible = true/false, но вот вариант, где надо скрывать объекты перед проверкой мне не очень нравится… Как лучше, организовать отрисовку объектов (вворачиваемых из quadTree)? А вообще нужна ли фильтрация отрисовки объектов, ведь флеш и сам не прорисовывает графику все зоны видимости... Помню, делал давно Octree на DirectX и там, чтобы отрисовать объект надо было в рендере вызвать функцию прорисовки объекта (не вызвана покадрово – не прорисовывается объект), т.е. почти нет лишних движений. Последний раз редактировалось Alexmody; 27.01.2011 в 20:46. |
![]() |
Часовой пояс GMT +4, время: 03:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|