Моє рішення полягало б у тому, щоб розглядати кожну фізичну сутність на ігровій карті як вузол дерева , а саму карту - як кореневий вузол . Вузли можуть містити інші вузли. Кожен вузол міститься (прямо чи опосередковано) всередині вузла карти.
Наприклад, скажімо, ваш персонаж стоїть на платформі. Вузол платформи містить вузол символу. Отже, щоразу, коли платформа рухається, вузли, які вона містить (в даному випадку персонаж), також будуть переміщуватися.
Щоб це сталося, кожен вузол повинен мати положення (x, y) щодо батьківського вузла . Наприклад, ваш персонаж може бути розташований на рівні (1,0) відносно платформи, яка сама може бути розташована (10,10) відносно ігрової карти. Таким чином, якщо платформа рухатиметься, ваш персонаж рухатиметься неявно.
У цьому ієрархічному дереві положення кожного вузла дорівнює сумі його положення плюс кожне положення його батьківських вузлів. Скажімо, ми хочемо отримати положення персонажа на карті. Ми обчислюємо:
(положення символу) + (положення батьківського вузла) + (положення кореневого вузла) = (1,0) + (10,10) + (0,0) = (11,0)
Гаразд, тому весь цей час ваш персонаж стояв на платформі. А як щодо стрибків? Ну, щойно він стрибає, ти від'єднуєш його від платформи і прикріплюєш його до вузла, що містить платформу ; у цьому випадку карта (кореневий вузол).
Коли він знову приземлиться, приєднайте його до будь-якого вузла, на якому він приземлився.