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

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

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

Регистрация: Dec 2010
Сообщений: 177
По умолчанию Отрисовка объектов полученных из 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 и там, чтобы отрисовать объект надо было в
рендере вызвать функцию прорисовки объекта (не вызвана покадрово –
не прорисовывается объект), т.е. почти нет лишних движений.


Последний раз редактировалось Alexmody; 27.01.2011 в 20:46.
Создать новую тему   Часовой пояс GMT +4, время: 03:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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