HLFX.Ru Forum
Показать все 11 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Обжект пул (https://hlfx.ru/forum/showthread.php?threadid=6069)


Отправлено FiEctro 18-01-2024 в 07:18:

Обжект пул

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

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

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

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


Отправлено Дядя Миша 18-01-2024 в 08:41:

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

Цитата:
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'


Отправлено XaeroX 18-01-2024 в 13:40:

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

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

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

__________________

xaerox on Vivino


Отправлено FiEctro 19-01-2024 в 06:06:

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


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

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

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


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

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


Отправлено Дядя Миша 19-01-2024 в 06:56:

Цитата:
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'


Отправлено FiEctro 19-01-2024 в 08:27:

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


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

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


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

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


Отправлено XaeroX 19-01-2024 в 13:55:

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

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 19-01-2024 в 20:10:

Цитата:
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'


Отправлено FiEctro 20-01-2024 в 09:03:

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

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



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

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


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

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


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

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


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

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


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

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


Отправлено Дядя Миша 20-01-2024 в 09:45:

Цитата:
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'


Отправлено FiEctro 21-01-2024 в 22:57:

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

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


Временная зона GMT. Текущее время 05:02.
Показать все 11 сообщений этой темы на одной странице

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