HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Обжект пул
Как лучше организовать менеджмент объектов
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Обжект пул

Речь не о том как просто это сделать, а как лучше и максимально эффективно организовать взаимодействие логики объектов между собой, и вообще какие варианты есть?

Вот допустим у вас есть простенькая игра в духе марио. У вас есть игрок, всякие итемы, монстры и части уровня. Всё это имеет какие то состояния, может добавляться и удаляться, а так же быть в множественном количестве, а так же мы можем всё это сохранять/считывать с диска. А так же у нас каждый объект имеет свой собственный экземпляр скрипта. Как все эти дела эффективно хранить и осуществлять поиск и перебор этих объектов и их свойств? Я конечно могу сделать менеджер который бы их сразу загружал в 1 стек и с ним работать, но боюсь такой топорный метод будет медленным и избыточным.

Это вопрос не по юнити или халфе. Это вопрос в целом по архитектуре подобных игр.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 18-01-2024 в 07:21

Сообщить модератору | | IP: Записан
Сообщение: 218906

Старое сообщение 18-01-2024 07:18
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Как ни делай, а перебирать ты их всё равно будешь в обычном цикле.
Если конечно не предполагается, что активны лишь объекты в каком-то радиусе вокруг игрока.

Цитата:
FiEctro писал:
Как все эти дела эффективно хранить

Всмысле эффективно? Есть два варианта всего. Либо у тебя все объекты имеют одинаковые поля, либо каждый объект имеет только те, которые ему нужны, но в цикле взаимодействует через абстрактный интерфейс.

Цитата:
FiEctro писал:
осуществлять поиск и перебор этих объектов и их свойств?

Определись, какие свойства ты вообще собрался искать. Как правило это строки. Я не представляю себе ситуацию типа "найди объект, у которого в некотором поле значение 512.0". А вот ситуацию "найди объект с именем mario" вполне хорошо представляю.
Добавляй объекты в ассоциативные многомерные массивы - это ИМХО самый быстрый способ поиска. Сначала в базе выбираешь по какому имени поля искать, потом перебираешь нужные имена, а к ним уже прилагаются списки всех объектов, которые имеют такое имя.

Цитата:
FiEctro писал:
такой топорный метод будет медленным и избыточным.

Цитата:
FiEctro писал:
А так же у нас каждый объект имеет свой собственный экземпляр скрипта

Зависит от производительности этих самых скриптов.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 218909

Старое сообщение 18-01-2024 08:41
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


FiEctro
Предложи несколько вариантов - мы обсудим плюсы и минусы каждого.
А так-то чего рассуждать?

Цитата:
FiEctro писал:
но боюсь такой топорный метод будет медленным и избыточным.

Глаза боятся - а руки делают.
Сделай реализацию, замерь производительность, сравни с другими вариантами.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 218912

Старое сообщение 18-01-2024 13:40
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Определись, какие свойства ты вообще собрался искать. Как правило это строки. Я не представляю себе ситуацию типа "найди объект, у которого в некотором поле значение 512.0". А вот ситуацию "найди объект с именем mario" вполне хорошо представляю.
Добавляй объекты в ассоциативные многомерные массивы - это ИМХО самый быстрый способ поиска. Сначала в базе выбираешь по какому имени поля искать, потом перебираешь нужные имена, а к ним уже прилагаются списки всех объектов, которые имеют такое имя.


Мне нужно просто как то пробросить ссылки между объектами чтобы было проще между ними пробрасывать взаимодействия. К примеру те-же итемы.

Со статическими то всё понятно, а вот с динамическими пока даже хз.

Цитата:
XaeroX писал:
Предложи несколько вариантов - мы обсудим плюсы и минусы каждого.
А так-то чего рассуждать?


Я спрашиваю какие варианты существуют, ты в ответ пишешь чтобы я их перечислил и проверил. Я отвечу - если знал бы, проверил, и не создавал таких бы тем.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 19-01-2024 в 06:08

Сообщить модератору | | IP: Записан
Сообщение: 218919

Старое сообщение 19-01-2024 06:06
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
Со статическими то всё понятно, а вот с динамическими пока даже хз.

А что ты имеешь в виду под статическими и динамическими.

Цитата:
FiEctro писал:
Я спрашиваю какие варианты существуют

Что ты там вообще делаешь? Очередную мобильную дрочильню?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 218921

Старое сообщение 19-01-2024 06:56
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
А что ты имеешь в виду под статическими и динамическими.


Инстансы, любые объекты которые могут создаваться и удаляться в любое время. Например тот же монстр может заспавниться, а потом быть удалён т.к. его убили.

Цитата:
Дядя Миша писал:
Что ты там вообще делаешь? Очередную мобильную дрочильню?


Типа того. Но тут скорее просто пытаюсь повысить свои скиллы в программировании. Т.е. вручную прокидывать ссылки, всякие синглтоны и делегаты я могу конечно, но вот когда у тебя объекты не в единичном экземпляре начинаются проблемы, мне приходится создавать списки куда я заношу свои инстанс объекты, а так же могу удалять их и редактировать сам лист (шарпы). Но вот если у тебя 2 и более листа, всё это очень не удобно перебрасывать и конвертировать между собой. Я вот и думаю возможно есть какие то уже готовые шаблоны для удобного менеджмента объектов. Опять же вопрос движка я опускаю, мне интересно как бы вы сами поступили в подобной ситуации если бы писали проект с нуля.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 19-01-2024 в 08:30

Сообщить модератору | | IP: Записан
Сообщение: 218923

Старое сообщение 19-01-2024 08:27
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
Я отвечу - если знал бы, проверил, и не создавал таких бы тем.

Глупости, конечно создавал бы.
Всегда полезно обсудить свои проверки с другими, да к тому же у других тоже может быть опыт в этом.
А тема "перечислите мне все варианты какие есть" - это так себе идея. Я, например, ни одного варианта тебе не назову, потому что не знаю ничего на память. Но если увижу варианты других - скорее всего, сориентируюсь, будет ли вариант годным и эффективным.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 218928

Старое сообщение 19-01-2024 13:55
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
тот же монстр может заспавниться, а потом быть удалён т.к. его убили.

Трупик-то останется. В целом статичными объектами можно считать сцену и игрока - их нельзя удалять ни в коем случае. Остальное можно.

Цитата:
FiEctro писал:
Но тут скорее просто пытаюсь повысить свои скиллы в программировании

Без конкретных задач это потеря времени.

Цитата:
FiEctro писал:
мне интересно как бы вы сами поступили в подобной ситуации если бы писали проект с нуля.

Для физики - линейный перебор, для поиска - ассоциативные массивы.
Всё зависит от кол-ва объектов на сцене. Тысяч до десяти оптимизировать не нужно.

Добавлено 19-01-2024 в 23:10:

Примерчег релевантный: в кваке максимум 600 объектов, линейный перебор для физики, поиск объекта по имени линейным перебором и всё это ворочалось на первом пне. И ничего.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 218937

Старое сообщение 19-01-2024 20:10
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Для физики - линейный перебор, для поиска - ассоциативные массивы.
Всё зависит от кол-ва объектов на сцене. Тысяч до десяти оптимизировать не нужно.

Примерчег релевантный: в кваке максимум 600 объектов, линейный перебор для физики, поиск объекта по имени линейным перебором и всё это ворочалось на первом пне. И ничего.



Получается что нечего выёживаться и достаточно просто хранить все динамические объекты в 1 листе?

Цитата:
Дядя Миша писал:
для поиска - ассоциативные массивы.


Это какой то конкретный паттерн? Неужели поиск по строкам будет быстрее?

Цитата:
Дядя Миша писал:
Без конкретных задач это потеря времени.


Ну так я обозначил задачу. Просто сейчас в моих проектах нет никакой архитектуры конкретной, всё наслаивается друг на друга из-за чего приходится дублировать некоторый код.

Цитата:
XaeroX писал:
Всегда полезно обсудить свои проверки с другими, да к тому же у других тоже может быть опыт в этом.


Я же написал либо всё в 1 лист пихать, либо иметь несколько таких независимых но уже более конкретизированных листов живущих своей жизнью.

Цитата:
Дядя Миша писал:
Трупик-то останется. В целом статичными объектами можно считать сцену и игрока - их нельзя удалять ни в коем случае. Остальное можно.


Я так понял что вообще объекты удалять и создавать желательно по минимуму и с использованием карутинов, многим монстрам можно просто менять трансформ и отключать физику, вместо удаления, а при рестарте снова их возвращать на место и сбрасывать их состояние.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 20-01-2024 в 09:04

Сообщить модератору | | IP: Записан
Сообщение: 218959

Старое сообщение 20-01-2024 09:03
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
Получается что нечего выёживаться и достаточно просто хранить все динамические объекты в 1 листе?

Ну да. Твои оптимизации наоборот скорость снизят.

Цитата:
FiEctro писал:
Неужели поиск по строкам будет быстрее?

Я не ищу по строкам, у меня таблица строк, у каждой строки уникальный идентификатор. Их и сравниваю.

Цитата:
FiEctro писал:
Я так понял что вообще объекты удалять и создавать желательно по минимуму

Удалять можно как угодно, при условии что ты готов корректно поддерживать связи между объектами, на случай их внезапного удаления.
Тут нужно что-то типа умного указателя.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 218966

Старое сообщение 20-01-2024 09:45
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Дядя Миша
Понял, спасибо.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 219048

Старое сообщение 21-01-2024 22:57
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 14:38. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Обжект пул
Как лучше организовать менеджмент объектов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024