|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
|||||||||||
Итератор контейнера по связанным типам21.01.2019, 13:55. Показов 939. Ответов 13
Здравствуйте!
Есть объект сущность, который содержит в себе некоторое количество компонентов. Есть менеджер сущностей, содержащий некоторое количество сущностей. Стоит задача реализовать метод менеджера сущностей для перебора всех сущностей по типу хранящихся в нем компонентов.
То есть мне нужно получить только те Entity, у которых есть в компоненты с заданными типами.
Находил довольно сложные реализации с битовыми масками, но не совсем понял саму суть.
0
|
|||||||||||
| 21.01.2019, 13:55 | |
|
Ответы с готовыми решениями:
13
Итератор для контейнера
STL итератор на конец контейнера |
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||||
| 21.01.2019, 14:17 | ||||||||
void each ничего не возвращает, для этого "получения". Обычно такимим штуками занимается система, если я верно все понял.Допустим нам нужно было бы апдейтнуть все сущности с необходимыми компонентами, этим могла бы занятся система, например:
0
|
||||||||
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
|||||
| 21.01.2019, 14:23 [ТС] | |||||
|
Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 1 минуту
0
|
|||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||
| 21.01.2019, 14:24 | ||||
|
0
|
||||
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
||||||||
| 21.01.2019, 14:28 [ТС] | ||||||||
|
Например, система хочет обработать все объекты, у которых есть компоненты с типами Comp1, Comp2
0
|
||||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||||
| 21.01.2019, 14:35 | ||||||||
0
|
||||||||
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
||
| 21.01.2019, 14:36 [ТС] | ||
|
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 21.01.2019, 14:36 | |
|
0
|
|
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
||
| 21.01.2019, 14:41 [ТС] | ||
|
По сути, логика очень похоже на логику работы игровых движков. Есть различные системы, в которых заложена вся логика работы приложения. Сущности и компоненты - только контейнеры. Каждая система работает только с определенными объектами. Например, система SpriteRenderer работает только с теми сущностями, у которых есть компоненты - Sprite, Transformation Добавлено через 43 секунды Вот и стоит задача получения системами выборки сущностей по наличию в них компонентов определенного типа
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 21.01.2019, 14:44 | ||
|
0
|
||
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
|||||||
| 21.01.2019, 14:52 [ТС] | |||||||
|
Пример: Нужно нарисовать процесс падения шарика с некоторой высоты.
И каждая система выбирает для себя нужные объекты, с которыми она может работать. С Ball будет работать система Рендеринга, система просчета физики - уже 2 системы. А если я хочу добавить компонент с триггером обработки столкновения с землей, то появляется еще и 3я система. Из за этого и не получается явно связать сущность с системой, потому что на одну сущность может быть много систем. Помимо этого, есть более интересные случаи, когда новые сущности появляются в рантайме - система частиц (В данном случае постоянно геренируются и удаляется новые объекты со своей физикой и текстурами).
0
|
|||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 21.01.2019, 15:03 | |||
|
1
|
|||
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
|
| 21.01.2019, 15:04 [ТС] | |
|
Попробую что нибудь работающее создать. Сюда скину решение, если что получится
0
|
|
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
|||||||||||||||||
| 22.01.2019, 23:00 [ТС] | |||||||||||||||||
|
Получился первый прототип. Функционал там неполный (нет большинства функций, нет систем и нет событий).
Реализовал пока что только возможность получать объекты по связным типап. Но пока версия сырая. Основная идея хранения и быстрого получения объектов - bitset.
A1, A2 A3 A3 Добавлено через 7 минут Единственное, что меня смущает - метод each смотрит все объекты и проверяет на совпадения битовых масок. Пока не смог придумать, как сделать выборку без полного перебора всех игровых объектов. Формальна задача такая:
Добавлено через 5 минут Но как я понял и у вас и у меня идет перебор всех игровых объектов Добавлено через 8 минут Получается, что метод each работает от O(N). Хочется получить O(1) при условии, что добавление + удаление компонента - это дополнительные вычисления. Например: Пусть система при инициализации выдвигает набор битовых масок (То есть по сути - это и есть определяющая объектов, так как объект является контейнеров компонентов). Тогда пусть у нас будет вектор, где каждая ячейка - группа. А группа - это набор битовых масок от систем. Получается, что при добавлении или удалении компонента (а это бывает не часто, значит не критично) мы определяем принадлежность объекта к группе. В итоге each будет напрямую обращаться к нужным объектам без перебора всех элементов. Единственно - расчитать принадлежность объекта к группе - это сравнение битовых масок, что может быть ен быстрым. Что думаете по поводу такого варианта?
0
|
|||||||||||||||||
| 22.01.2019, 23:00 | |
|
Помогаю со студенческими работами здесь
14
Итератор для собственного контейнера Итератор контейнера внутреннего класса шаблона
Как сделать, чтобы итератор указывал на определенный элемент контейнера? В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|