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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Jun 2011
Сообщений: 18
По умолчанию Active=false vs Create;

Работаю с объектным пулом. Все объекты пресоздаются, по необходимости достаются, активируются, умирая отправляются обратно в пул. Всё как положено. Однако физ тела, создаются при активации. И удаляются при деактивации. Со всем накладными расходами. Вот и вопрос как этого избежать. activate=false, есть решение? или висящие, даже в неактивном виде объекты являются просадой по производительности? Как минимум потому что они в общем списке тел, и каждый Step по ним идёт итерация?
__________________
_____
Почему-то перманентно чувствует себя лезущим куда-то не туда занудой. Тяжёлый случай. >.<

Старый 08.09.2011, 06:59
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
даже в неактивном виде объекты являются просадой по производительности? Как минимум потому что они в общем списке тел, и каждый Step по ним идёт итерация?
Естественно являются. Поэтому неактивным телам лучше задавать тип b2_staticBody, для таких тел физика не спросчитывается.
Цитата:
Однако физ тела, создаются при активации. И удаляются при деактивации. Со всем накладными расходами. Вот и вопрос как этого избежать.
Что тут понимается под деактивацией? SetActive(false)? или какой-то свой метод?

Старый 08.09.2011, 17:01
Seagull вне форума Посмотреть профиль Отправить личное сообщение для Seagull Найти все сообщения от Seagull
  № 3  
Ответить с цитированием
Seagull

Регистрация: Jun 2011
Сообщений: 18
Цитата:
Сообщение от goodguy Посмотреть сообщение
Поэтому неактивным телам лучше задавать тип b2_staticBody, для таких тел физика не спросчитывается.

Что тут понимается под деактивацией? SetActive(false)? или какой-то свой метод?
Свои методы. Стандартные для паттерна "объектный пул". Задача активации - проинициализировать объект, добавить в списки отображения, подписать на таймер, и тп.. Задача Деактивации- всё наоборот. В бокс2д, насколько я вижу из дебаггера, даже неактивное тело лежит в одном списке с всеми остальными. (проверить можно GetNext()-ом). Не знаю нет ли отдельного, внутреннего списка активных для обсчёта внутренних процессов, но допиливать физ движок не очень входит в мои планы неблагодарное это дело, времени кушать много будет. Вот поэтому, лишние 100-200 неактивных тел, держать не хочется... А создавать каждый раз, малость противоречит идее пула.

Кстати, вы не правы. Для статических тел физика считается. Но только с динамическими. Между собой статические не обсчитываются. А вот флаг active=false - судя по рефференсу, и по опыту, отключает рассчёты.

Но это тоже полумера. Вот думал,может кто знает как корректно работать с телами. Возможно, их можно создавать минуя CreateBody, И просто подцеплять в список тел. Может им ещё что- то нужно. Кто-то знает?
__________________
_____
Почему-то перманентно чувствует себя лезущим куда-то не туда занудой. Тяжёлый случай. >.<

Старый 08.09.2011, 17:50
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Вот поэтому, лишние 100-200 неактивных тел, держать не хочется...
А зачем создавать такую кучу тел? Без этого всегда можно обойтись, по идее

Старый 09.09.2011, 00:26
Seagull вне форума Посмотреть профиль Отправить личное сообщение для Seagull Найти все сообщения от Seagull
  № 5  
Ответить с цитированием
Seagull

Регистрация: Jun 2011
Сообщений: 18
Цитата:
Сообщение от goodguy Посмотреть сообщение
А зачем создавать такую кучу тел? Без этого всегда можно обойтись, по идее
Очень сомневаюсь что вы действительно этого не знаете, однако Ссылка. Очень не понятно и не приятно, когда вроде бы старожилы(по кол-ву постов и репутации хотя бы), вроде бы собравшись отвечать пишут ни о чём. Создаётся впечатление, что либо хотят хоть что-то написать, чтобы было, либо за дебила считают. Мне кажется зачем создавать столько объектов, в данном случае не принципиально. Но это лирика, вообще проблема вроде решена. Не совсем так как хотелось бы, но решена.

Пока я создал времянку-функцию AddBody() в b2World-е... Которая работает почти так же как и Create, но пропускает момент создания тела получая его извне. Да, таким образом действительно получается нормально кэшировать физ тела, не теряя производительность даже на 1000 предсозданных тел. В отличии от SetActive они не присутствуют в общем списке тел, сответственно не отрисовываются DebugDraw и не едят процессорное время. только память. Багов пока не наблюдаю. Я посмотрел код, вроде там ничего горбить и не должно. Ибо на С++ строжайше запрещали создавать тела иначе как через вызов CreateBody()... Во всяком случае мне помнится такое...
__________________
_____
Почему-то перманентно чувствует себя лезущим куда-то не туда занудой. Тяжёлый случай. >.<

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

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

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


 


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


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