Я намагаюся створити систему компонентів на основі компонентів для навчальних цілей (і пізніше використовувати в деяких іграх), і у мене виникають деякі проблеми, коли справа стосується оновлення держав сутності.
Я не хочу мати метод оновлення () всередині компонента, щоб запобігти залежності між компонентами.
На даний момент я маю на увазі, що компоненти містять дані та компоненти оновлення систем.
Отже, якщо у мене є проста двовимірна гра з деякими сутностями (наприклад, гравцем, ворогом1, ворогом2), які містять компоненти "Трансформація", "Рух", "Стан", "Анімація" та "Візуалізація", я думаю, що я повинен мати:
- Система Movement, яка переміщує всі компоненти Movement і оновлює компоненти стану
- І RenderSystem, що оновлює компоненти Анімації (компонент анімації повинен мати одну анімацію (тобто набір кадрів / текстур) для кожного стану, і оновлення означає означає вибір анімації, що відповідає поточному стану (наприклад, стрибки, переміщення_ліво тощо), і оновлення індексу кадру). Потім RenderSystem оновлює компоненти Render текстурою, що відповідає поточному кадру анімації кожної сутності, і відображає все на екрані.
Я бачив такі реалізації, як Artemis Framework, але не знаю, як вирішити цю ситуацію:
Скажімо, у моїй грі є такі сутності. Кожна сутність має набір станів та одну анімацію для кожного стану:
- гравець: "простоювати", "рухатися_право", "стрибати"
- neprijatelj1: "переміщення_уп", "переміщення_наниз"
- neprija2: "переміщення_ліво", "переміщення_право"
Які найбільш прийняті підходи для оновлення поточного стану кожної організації? Єдине, про що я можу подумати - це наявність окремих систем для кожної групи сутностей та окремих державних та анімаційних компонентів, тому я мав би PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... але я думаю, це погано рішення та порушує мету створення системи на основі компонентів.
Як бачите, я тут зовсім загубився, тому дуже вдячний за будь-яку допомогу.
EDIT: Я думаю, що рішення зробити цю роботу такою, якою я маю намір, це:
Ви робите державний компонент та анімаційний компонент загальним для того, щоб використовувати його для всіх об'єктів. Дані, які вони містять, будуть модифікатором для зміни речей, наприклад, які анімації відтворюються або які стани доступні. - Байт56
Тепер я намагаюся розібратися, як розробити ці два компоненти загально, щоб я міг їх повторно використовувати. Можливо, якщо UID для кожного стану (наприклад, ходьба, біг ...) та збереження анімації на карті в AnimationComponent, введений цим ідентифікатором, буде хорошим рішенням?
statecomponent
і animationcomponent
загальнодоступні, щоб використовуватись для всіх організацій. Дані, які вони містять, будуть модифікатором для зміни речей, наприклад, які анімації відтворюються або які стани доступні.