Задать вопрос
  • Entity Component System + ООП подход?

    siRius32, представь себе игру в шахматы. Там много фигур и одно поле. Если ты захочешь реализовать эту игру через ECS, все фигуры у тебя сразу станут серыми и однородными, появятся компоненты ортогонального и диагонального движения, компоненты движения только вперед и компоненты движения конем. Еще появится компонент атаки по направлению.
    И вот давай вместе просто подумаем, какими компонентами в таком ECS-мире будет обладать сущность "состояние игры" или "игровое поле"?

    А если попробовать все-таки сформулировать такие компоненты для таких сущностей, то зачем эти компоненты сущностям фигур? И зачем сущностям поля или состояния игры компоненты фигур? Это вносит в мир ECS неоднородность, набор компонентов становится несвязным. Для одних сущностей становятся характерны только один компоненты, а для других - только другие. Получается снова недоархитектура.
    Такой ECS-мир является избыточным и, вероятно, должен быть разделен на несколько ECS миров, компоненты в которых будут связными.
  • Entity Component System + ООП подход?

    siRius32, да, ты верно подходишь, на компоненты это все переписывать не надо. Я на эту тему ответил в твоем прошлом вопросе.
    Дело в том, что ECS оперирует обезличенными сущностями с максимально средним набором компонент, где у каждой сущности есть вероятность обрести или утратить абсолютно любой компонент.
    Внешние же, и уникальные, элементы должны остаться за пределами этого ECS мира. Они могут быть связаны через идентификатор сущности со своими свойствами внутри мира ECS.

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

    А проблема заключается в том, что ECS в любой момент должен иметь возможность распорядиться по-своему абсолютно каждой сущностью. Создать новую, удалить текущую, добавить компоненты, убрать компоненты. В этом гибкость подхода ECS. Более того, ECS изначально, как архитектура, спроектирован так, чтобы дать разработчику возможность неблокирующего массового распараллеливания симуляции мира. На все ядра сразу и сразу на 100%.
    Когда ты замешиваешь ООП в ECS, часть опор архитектуры ECS рушится. В результате ты получаешь недоархитектуру, которой уже не так удобно пользоваться. Так всегда бывает с любым архитектурным шаблоном: ты не можешь пользоваться им с присущим ему удобством если сам же это удобство загубил.
    Ты можешь получить внезапный удар в спину от невозможности больше удалять компоненты после их добавления. Или - невозможность оперировать жизнью компонентов после создания сущности. Или - недоступную более возможность массового распараллеливания.
    Это все больно бьет по удобству использования ECS.
    Это я говорю как участник двух Open Source разработок ECS библиотек и создатель трех собственных версий ECS.
  • Entity Component System + ООП подход?

    siRius32, да, это плохой дизайн. Java не оставляет тебе шанса в отказе от ООП, но даже в Java можно реализовать правильный подход ECS.

    Важным пунктом идеологии ECS является эфемерность сущности. В ней не должно быть логики, в ней не должно быть данных. Сущность - это что-то среднее между абстрактным указателем и хешем. И только системы должны иметь понимание семантики сущности. Доступ ко всем данным сущности и всю логику сущности должны реализовать именно системы.
  • Как решить проблему в visual studio 2019 c++?

    @MarkusD Куратор тега C++
    JoJikRe , этот крестик - это сообщение об ошибке исполнения. std::out_of_range говорит о том, что код попытался обратиться за пределы стандартного контейнера. Исключение было сгенерировано на той строчке, на которой ошибка и присутствует.
    Тебе стоит просто отладить свой код.
  • Вызов C++ функций в python?

    @MarkusD Куратор тега C++
    newuser20, тебе нужно это все описать в своем вопросе. В комментариях к ответам эта информация бесполезна.
  • Вызов C++ функций в python?

    @MarkusD Куратор тега C++
    newuser20, тебе стоит расписать больше, т.к. сейчас твой вопрос только вводит в заблуждение.
    Сформулируй свой вопрос в более подробной форме, чтобы было понятно, какую именно функцию ты хочешь вызвать и какой результат получить.
  • Нужно ли инициализировать статические переменные?

    @MarkusD Куратор тега C++
    oftywave, это уже выходит за рамки текущего вопроса. Оффтоп запрещен правилами.
    Тебе будет лучше оформить это как свой новый вопрос. В этом случае ответить на него смогу не только я, но и другие люди тоже.
  • Как удалить символ из строки?

    @MarkusD Куратор тега C++
    Руслан Тиляев , а чем удаление слова отличается от удаления символа?
  • Нужно ли инициализировать статические переменные?

    @MarkusD Куратор тега C++
    oftywave, мои вопросы подразумевают некоторое знание, обладая котором в вопросе можно сориентироваться.
    Хорошо что ты открыто говоришь о том, что не сориентировался.
    С твоих слов статическая переменная ни чем не отличается от утекшей динамической памяти. Ее тоже один раз выделили и один раз проинициализировали, а потом она утекла и прожила до кона жизни процесса.

    И, все-таки, это не верно. Тебе нужна информация о природе статического времени жизни: [1], [2]. Это как минимум.
    Дополнительно, тебе стоит сразу понять проблему фиаско статической инициализации.

    Статической переменную (или константу) делает расположение этой переменной в памяти с характеристикой статического времени жизни (static storage-duration).
    Статический объект от глобального отличается тем, что определен с применением слова static, которое разрешает только внутреннее связывание (internal linkage) объекта в рамках текущего модуля трансляции. Глобальные объекты имеют внешнее связывание (external linkage) и могут быть использованы в других модулях трансляции. Возможность связывания - это именно то, что отличает глобальные объекты от динамической памяти. Для динамической памяти связывание недоступно.
    Объекты в памяти статического времени жизни инициализируются до начала работы главной функции и деинициализируются после выхода из главной функции.
    При этом, инициализация происходит в соответствии с общим правилом инициализации любого объекта любого типа. В случае с тривиальными типами инициализация объекта будет фиктивной. Тривиальные типы не имеют функционального конструктора по умолчанию и всегда должны быть явно инициализированы.

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

    @MarkusD Куратор тега C++
    oftywave , что делает переменную статической, какие свойства добавляются переменной чтобы она стала статической?
  • Не выравниваются функциональные блоки?

    oftywave,
    это уже вкусовщина пошла

    Имей в виду, что так зачастую говорят люди без понимания деталей разработки. Такие термины, как стратификация, декомпозиция, модульность и изоляция, означают отнюдь не вкусовщину. Как человеку начинающему, тебе пока простительно незнание важных архитектурных приемов создания поддерживаемого кода, но лучше с этим не засиживаться.

    Между тем, тысяча с лишним строк в файле исходного кода - это средний объем кода в крупном проекте. И студия легко с этим объемом справляется. Я иногда работаю в файлах с тремя или пятью тысячами строк. Проблем не испытываю.
    Проблема у тебя явно локальная. Будет хорошо если ты покажешь настройки Intellisense.
  • Как заставить ботов убегать от преследователей?

    Magneto903, тебе стоит почитать про Navmesh building и Convex Hulling.
    Результирующее навигационное пространство может содержать дополнительные свойства, в числе которых может быть свойство тупиковой ветви движения (ближе-дальше относительно тупика), свойство поверхности передвижения, свойство габаритов прохода.
    Такие дополнительные свойства добавляются в пространство для того чтобы варьировать поведение разных аниматов в рамках единого навигационного пространства.
  • Влияет ли низкое напряжение сети на работу фотополимерного принтера?

    Jek, тогда советую сделать тест на засветку. Просто берешь каплю на что-нибудь капаешь и кладешь под солнце.
    Минуты засветки будет достаточно чтобы фотополимер полностью затвердел. Если не твердеет, значит он уже деградировал.
    Китайская смола от Anicubic такая себе, быстро сепарируется и быстро деградирует.
  • Влияет ли низкое напряжение сети на работу фотополимерного принтера?

    Jek , был ли принтер все время простоя включен в сеть? Встряхивал ли ты фотополимер перед заливкой в ванну для печати? Делал пробу фотополимера на засветку солнечным светом?
  • Что за файлы sources в папках с исходным кодом?

    Сергей Карбивничий, я занимаюсь разработкой, в частности, под Win и XBox. И, нет, про структуру этого файла я ничего не знаю, да и не должен. Никогда даже не задумывался о том, что эти файлы должны для меня нести какой-либо смысл.
    Но тебе сперва стоило бы провести более детальный поиск по файлам. Все вполне хорошо описывается прямо в этих файлах.
  • Что за файлы sources в папках с исходным кодом?

    Сергей Карбивничий, в таких случаях принято в вопросе публиковать ссылку на публичный репозиторий.
  • Что за файлы sources в папках с исходным кодом?

    Сергей Карбивничий , П5.4 регламента работы сервиса.
    Надеюсь, у тебя есть право на разглашение и на просмотр исходных кодов ОС от Microsoft.
  • Как обратиться к ячейке памяти?

    @MarkusD Куратор тега C++
    Никита, а давай для начала определим что такое динамическая память, рас ты с ней уже работал.
  • Как обратиться к ячейке памяти?

    @MarkusD Куратор тега C++
    Никита , и в чем конкретно у тебя проблема?