Намагаюся обернути голову навколо способів правильно впоратися зіткненням у грі, розробленій навколо компонентів.
Я бачу, що в багатьох прикладах є щось таке, PhysicsComponent
що додається до списку компонентів сутності, але фактична реалізація мене бентежить.
Щоб це працювало, PhysicsComponent
потрібен був би доступ до навколишнього світу. Це не має для мене інтуїтивного сенсу. Чи не повинен компонент не знати про свій контейнер (сутність), але і про його контейнер (світ)?
Для мене це здається, що рівень або сцена повинна підтримувати перелік цих сутностей і кожне оновлення гри, прокручувати сутності, щоб визначити, хто стикається.
Моє питання - по-перше, чи це хороша конструкція чи ні, по-друге, як визначити, які об'єкти можуть зіткнутися. Я припускаю, що тверді особи можуть реалізувати порожній інтерфейс IRigidBody, щоб рівень міг визначити, які об'єкти у списку підтримують зіткнення. Але це порушує складову конструкції?
Натомість, чи повинні вони містити порожній компонент RigidBody? Насправді це може бути кращим, оскільки він не завжди може бути порожнім, і такий підхід є більш надійним. Єдина проблема з цим - складність. Сцена повинна переглядати не тільки кожну сутність, але й компоненти кожної сутності, щоб визначити, чи був у неї цей компонент RigidBody.
По-третє, коли вони стикаються, обидва суб'єкти повинні бути поінформовані якось, і я не впевнений у тому, як це досягти.
Скажімо, що обидві організації містили HealthComponent, і коли вони зіткнулися, то їхнє здоров'я зменшилось би на деяку довільну цінність 5. Я гадаю, що відповідальність за цю ситуацію повинна виявити, коли виявить зіткнення двох об'єктів?
Але тоді сцена занадто велика? Я міг бачити, як це може вийти з рук і стати непростим, коли сцена відповідає за багато речей, до яких суб'єкти не повинні (?) Мати доступ.
Редагувати: запитання оновлено з більш детальною інформацією.