![]() |
Уничтожение объектов - Версия для печати +- Xtreme3D Community (https://xtreme3d.ru/forums) +-- Форум Xtreme3D (https://xtreme3d.ru/forums/forumdisplay.php?fid=3) +--- Форум Вопросы и ответы (https://xtreme3d.ru/forums/forumdisplay.php?fid=6) +--- Темы: Уничтожение объектов (/showthread.php?tid=70) Страницы:
1
2
|
Уничтожение объектов - Глеб - 03-19-2022 Столкнулся с проблемой уничтожения объектов. Когда это происходит игра вылетает после зависания. Но оставлять объекты мне не нужно, их может быть бесчисленное количество. В справке написано что уничтожать объекты безопасно если нету потомков и у некоторых объектов свои функции уничтожения. У меня нету у этих объектов потомков, но все равно вылетает из игры. Как очистить эти объекты? Ведь нужно экономить память, потому что если их не удалять а просто скрывать то это наверное приведет к неблагоприятному. Уничтожение объектов - Gecko - 03-19-2022 Не должно вылетать, если после уничтожения объект нигде не используется. Но если создается и уничтожается много объектов динамически, то эффективнее не удалять их, а скрывать и заносить в какой-нибудь список, а потом оттуда доставать для переиспользования, когда нужно создать новый. Т.е., создать пул объектов. Уничтожение объектов - Глеб - 03-19-2022 я делаю вот так: ObjectDestroy(object);instance_destroy(); У меня есть разные объекты самого гамака и объекты xtreme внутри их Я использую o_engine для создания объектов xtreme, потом создаю объект gm и в нем Proxy нужного объекта, чтобы каждый раз не загружать новый, потом его удаляю после использования (взрыва), но при удалении вылетает в редактор или зависает до завершения программы, я убрал удаление xtreme объекта и больше не вылетает. Но объект xtreme остается. Уничтожение объектов - Gecko - 03-19-2022 Я бы делал все в одном объекте - если привязывать их к объектам ГМ, которые еще и динамически создаются, могут быть проблемы, связанные с очередностью выполнения логики в Step. В теории оно может так работать, но просто отлаживать сложнее. Если что-то не удаляется нормально, то скорее всего не все связи очищены, что-то где-то продолжает ссылаться на объект. Но я, если честно, не тестировал удаление всех типов объектов, так что допускаю, что это может быть баг. Уничтожение объектов - Глеб - 03-19-2022 Просто в одном объекте не создашь количество нужных xtreme-объектов приближенной к бесконечности, в отличии от создания нового объекта-gm. Таких может быть бесчисленное множество. А делать все в объекте engine дает скончаемое количество (так как каждый xtreme-объект имеет свое имя). К тому же я использую direction объекта для его поворота по Y и x y гамака, для передвижения. Остается только ObjectSetPosition(object,x,Y,y); Мне это нужно для движения и вычислений функций гамака, которые не стыкуются с объектами xtreme (например instance_nearest(x,y,object)) и их проще выставить в комнате (если они привязаны к x y). Есть какой-то другой способ о котором я не знаю? Это может быть не баг если после события аларм происходит чтение из события степа объекта. Это может быть так? У меня в событии аларм уничтожается объект, а в степе еще есть функции с этим объектом. Уничтожение объектов - Глеб - 03-19-2022 Нет это не баг я проверил. Дело в том что после уничтожения объекта в степе на следующих строчках еще были функции с этим объектом То есть уничтожение объекта должно быть самой последней ссылкой в степе на объект-xtreme. Если будет еще этот объект вызываться после в степе тогда игра зависнит или вылетит Уничтожение объектов - Gecko - 03-21-2022 Цитата:Просто в одном объекте не создашь количество нужных xtreme-объектов приближенной к бесконечности, в отличии от создания нового объекта-gm. Таких может быть бесчисленное множество. А делать все в объекте engine дает скончаемое количество (так как каждый xtreme-объект имеет свое имя).Нет такого ограничения, для Xtreme совершенно не важно, как ты создаешь его объекты - он про ГМ ничего не знает. Это чисто вопрос архитектуры приложения. Цитата:К тому же я использую direction объекта для его поворота по Y и x y гамака, для передвижения. Остается только ObjectSetPosition(object,x,Y,y); Мне это нужно для движения и вычислений функций гамака, которые не стыкуются с объектами xtreme (например instance_nearest(x,y,object)) и их проще выставить в комнате (если они привязаны к x y). Есть какой-то другой способ о котором я не знаю?Если так, то да, есть смысл делать в объектах ГМ. Но как я уже сказал, если что-то удалять динамически, есть риск того, что где-то остаются ссылки на несуществующие объекты. Цитата:Это может быть не баг если после события аларм происходит чтение из события степа объекта. Это может быть так? У меня в событии аларм уничтожается объект, а в степе еще есть функции с этим объектом.Очень вероятно, что проблема где-то тут) Кстати, забыл сказать: у видимых объектов Xtreme графические данные всегда создаются заново (у моделей, примитивов и пр.). Если нужно много точных копий объекта, то надо использовать Proxy (или ActorProxy), иначе память у тебя будет засоряться лишними копиями моделей. Уничтожение объектов - Глеб - 03-21-2022 Да я так и делаю Proxy object Proxy actor, но несмотря на то, что мои деревья, тава, кусты - бревна obj все равно когда их становиться видно фпс падает вдвое, думаю уже бросать проект Уничтожение объектов - Gecko - 03-23-2022 Fps падает в отсутствие оптимизации покадровой нагрузки. Чем больше видимых объектов, тем больше расчетов матриц в Update и нагрузка на пайплайн для обработки примитивов (которые, возможно, в итоге вообще не будут отрисованы). Так что, по идее, нужно скрывать объекты, которые находятся за пределами экрана. Куллинг по пирамиде видимости - EngineSetCulling(vcObjectBased) или EngineSetCulling(vcHierarchical) - может в этом помочь, но не во всех случаях - например, если объекты находятся за стеной или горой, то они все равно считаются видимыми для куллинга. В интерьерных сценах можно сделать систему порталов (т.е., показываем комнату, только если игрок в ней, или на экране виден дверной проем - и так же, рекурсивно, связанные с ней комнаты). В общем случае это будет вычислительно дешевле, чем обычный куллинг, который является брутфорс-алгоритмом - при использовании порталов мы вообще не проходим по заведомо невидимым комнатам и не проверяем их. Xtreme в принципе имеет все нужные для системы порталов инструменты, но у меня пока нет готовой реализации. В уличных сценах можно для детализированных объектов сделать lod'ы и использовать мультипрокси, но это конечно немного усложняет логику игры, в зависимости от используемых компонентов. Из-за того, что мало встроенных оптимизаций, GLScene/Xtreme3D - скорее для маленьких игр с ограниченным миром, чем для open world и тому подобного. Вообще библиотека, как я понимаю, изначально создавалась больше под научную визуализацию, да и игры в те времена были не такие большие. Уничтожение объектов - Глеб - 03-23-2022 Я использую ObjectInFrustrum и скрываю если ложь |