Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отрисовка объектов полученных из QuadTree (http://www.flasher.ru/forum/showthread.php?t=149569)

Alexmody 27.01.2011 20:24

Отрисовка объектов полученных из QuadTree
 
Делаю 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;
        }
}

В итоге мне очень не нравится, что приходится в bufOb
запоминать прорисованные объекты и далее перед проверкой quadTree скрывать их.
Т.к. иначе камера может переместиться и эти объекты будут отображены, хотя они не
попадают в область видимости камеры.
Вообще скрывать/показывать объекты это наверно не очень хороший вариант, т.к. если
объектов тысячи, то хоть они и крыты но флеш будет тратить на них ресурсы, т.к. они в
списке отображения. Если же делать removeChild/addChild, то тут значительно больше
работы по возвращению в сцену объекта в нужном положении/состоянии.

Хотелось бы отрисовывать объекты через свойство visible = true/false, но вот вариант,
где надо скрывать объекты перед проверкой мне не очень нравится…
Как лучше, организовать отрисовку объектов (вворачиваемых из quadTree)?

А вообще нужна ли фильтрация отрисовки объектов, ведь флеш и сам не прорисовывает
графику все зоны видимости...

Помню, делал давно Octree на DirectX и там, чтобы отрисовать объект надо было в
рендере вызвать функцию прорисовки объекта (не вызвана покадрово –
не прорисовывается объект), т.е. почти нет лишних движений.


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

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