Задавши два запитання щодо систем сутності ( 1 , 2 ) та прочитавши про них деякі статті , я думаю, що я їх розумію набагато краще, ніж раніше. У мене все ще є певні невизначеності, головним чином щодо створення випромінювача частинок, системи введення та камери. У мене, очевидно, є проблеми з розумінням сутнісних систем, і вони можуть бути застосовані до цілого ряду об'єктів, але я вибрав ці три, оскільки вони є дуже різними поняттями, повинні охоплювати досить широку основу та допомагати мені розуміти сутні системи та як Я сам вирішував такі проблеми, як вони виникають.
Я будую двигун у JavaScript, і я реалізував більшість основних функцій, серед яких: введення даних, гнучка система анімації, випромінювач частинок, класи математики та функції, обробка сцени, камера та візуалізація, і ціла купа інших речей, які зазвичай підтримують двигуни. Я прочитав відповідь Byte56, яка зацікавила мене перетворити двигун в сутнісну систему. Він все ще залишатиметься ігровим двигуном HTML5, з базовою філософією сцени, але він повинен підтримувати динамічне створення об'єктів із компонентів.
Проблема, яку я маю, полягає в тому, щоб вписати свою стару концепцію двигуна в цю нову парадигму програмування. Ось деякі визначення з попередніх питань, оновлених:
Сутність є ідентифікатором. У нього немає даних, це не об’єкт, це простий ідентифікатор, який представляє індекс у списку сцен усіх сутностей (який я насправді планую реалізувати як компонентну матрицю).
Компонент є власником даних, але з допомогою методів , які можуть працювати з цими даними. Найкращий приклад -
Vector2D
компонент "Позиція". Він має дані:x
іy
, а також деякі методи , які роблять працюють на даних трохи простіше:add()
,normalize()
і так далі.Системи є те , що може працювати на безлічі суб'єктів, що відповідають певним вимогам; зазвичай суб'єктам господарювання необхідно мати визначений набір компонентів, якими слід керувати. Система - це «логічна» частина, частина «алгоритм», вся функціональність, що надається компонентами, суто для легшого управління даними.
Камера
У камери є Vector2D
властивість позиції, властивість обертання та деякі методи її центрування навколо точки. Кожен кадр подається рендерінгу разом із сценою, і всі об'єкти переводяться відповідно до його положення. Потім сцена відображається.
Як я міг представити такий тип об'єкта в системі сутності? Чи буде фотокамера сутністю, компонентом чи комбінацією (відповідно до моєї відповіді )?
Випромінювач частинок
Проблема, що виникає з моїм емітером частинок, знову ж таки, що має бути чим. Я впевнений, що самі частинки не повинні бути сутністю, тому що я хочу підтримати понад 10 000 з них, і я вважаю, що створення такої кількості сутностей буде важким ударом для моєї роботи.
Як я міг представити такий тип об'єкта в системі сутності?
Менеджер введення даних
Останнє, про яке я хочу поговорити, - це те, як слід обробляти дані. У моїй поточній версії двигуна є клас, який називається Input
. Це обробник, який підписує події браузера, такі як натискання клавіш та зміни положення миші, а також підтримує внутрішній стан. Потім у класі гравця є react()
метод, який приймає об’єкт введення як аргумент. Перевага цього полягає в тому, що об'єкт введення можна серіалізувати в .JSON, а потім поділитись по мережі, що дозволяє плавно проводити багатокористувацькі імітації.
Як це перекладається в систему сутності?