Я досить новачок в ідеях сутнісних систем, прочитавши купу матеріалів (найкорисніше, цей чудовий блог і ця відповідь ).
Хоча у мене виникають невеликі проблеми з розумінням того, як щось таке просте, як можливість маніпулювати положенням об'єкта за допомогою невизначеної кількості джерел.
Тобто я маю свою сутність, яка має позиційний компонент. Тоді в грі у мене є якась подія, яка сповіщає цю сутність перенести задану відстань за певний час.
Ці події можуть статися в будь-який час і матимуть різні значення для положення та часу. Як результат, вони складаються разом.
У традиційному OO-рішенні я мав би якийсь MoveBy
клас, який містить відстань / час та масив тих, що знаходяться в моєму ігровому об’єктному класі. Кожен кадр я повторюю через усі MoveBy
, і застосовую його до позиції. Якщо a MoveBy
досяг свого часу закінчення, вийміть його з масиву.
Що стосується системи сутності, я трохи плутаюсь, як я повинен повторювати таку поведінку.
Якщо б було лише одне з них за один раз, замість того, щоб можна було з'єднати їх разом, було б досить просто (я вважаю) і виглядати приблизно так:
PositionComponent
що містять x, y
MoveByComponent
що містять x, y, time
Entity
який має і a, PositionComponent
і aMoveByComponent
MoveBySystem
що зовнішній вигляд для об'єкта з обома цими компонентами, і додає значення MoveByComponent
до PositionComponent
. Коли значення time
досягається, він видаляє компонент із цього об'єкта.
Я трохи розгублений у тому, як би я робив те саме, що й багато рухів.
Мої початкові думки полягають у тому, що я мав би:
PositionComponent
, MoveByComponent
те саме, що вище
MoveByCollectionComponent
який містить масив MoveByComponent
s
MoveByCollectionSystem
що шукає сутність з a PositionComponent
і a MoveByCollectionComponent
, ітерація через MoveByComponent
s всередині неї, застосовуючи / видаляючи за необхідності.
Я думаю, що це більш загальна проблема: мати багато однакових компонентів і бажати, щоб відповідна система діяла на кожну. Мої сутності містять свої компоненти всередині хеша типу компонента -> компонент, тому суворо мають лише 1 компонент певного типу на сутність.
Це правильний спосіб дивитися на це?
Чи має суб'єкт господарювання завжди мати лише один компонент даного типу?
move x by 10 in 2 seconds
і move x by -10 in 2 seconds
сутність стояла б ідеально нерухомо?
MoveBy
функціональність - це просто швидкість? Це здається, що ви на правильному шляху. Для вашого другого питання існує безліч різних реалізацій систем / компонентів. Опис, описаний у моїй відповіді, яку ви зв'язали, мав би лише один компонент даного типу.