Мое решение состояло бы в том, чтобы рассматривать каждый физический объект в игровой карте как узел дерева , а саму карту как корневой узел . Узлы могут содержать другие узлы. Каждый узел содержится (прямо или косвенно) внутри узла карты.
Например, скажем, ваш персонаж стоит на платформе. Узел платформы содержит узел персонажа. Таким образом, всякий раз, когда платформа перемещается, узлы, которые она содержит (в данном случае персонаж), также будут перемещаться.
Для этого каждый узел должен иметь (x, y) позицию относительно родительского узла . Например, ваш персонаж может быть расположен в (1,0) относительно платформы, которая сама может быть расположена в (10,10) относительно игровой карты. Таким образом, если платформа движется, ваш персонаж будет двигаться неявно.
В этом иерархическом дереве позиция каждого узла равна сумме его позиции плюс каждой позиции его родительских узлов. Допустим, мы хотим получить положение персонажа на карте. Мы рассчитываем:
(позиция персонажа) + (позиция родительского узла) + (позиция корневого узла) = (1,0) + (10,10) + (0,0) = (11,0)
Итак, все это время ваш персонаж стоял на платформе. А как насчет прыжков? Ну, в тот момент, когда он прыгает, вы отрываете его от платформы и прикрепляете его к узлу, в котором находится платформа ; в этом случае карта (корневой узел).
Когда он приземлится снова, прикрепите его к любому узлу, на котором он приземлился.