La mia soluzione sarebbe quella di trattare ogni entità fisica nella mappa di gioco come un nodo dell'albero e la mappa stessa come nodo principale . I nodi possono contenere altri nodi. Ogni nodo è contenuto (direttamente o indirettamente) all'interno del nodo della mappa.
Ad esempio, supponiamo che il tuo personaggio sia su una piattaforma. Il nodo della piattaforma contiene il nodo del personaggio. Quindi, ogni volta che la piattaforma si sposta, anche i nodi che contiene (in questo caso il personaggio) si sposteranno.
Perché ciò accada, ogni nodo dovrebbe avere una posizione (x, y) rispetto al nodo padre . Ad esempio, il tuo personaggio potrebbe trovarsi in (1,0) rispetto alla piattaforma, che potrebbe trovarsi in (10,10) in relazione alla mappa di gioco. In questo modo, se la piattaforma si muove, il tuo personaggio si muoverà implicitamente.
In questo albero gerarchico, la posizione di ogni nodo è uguale alla somma della sua posizione più ciascuna delle posizioni dei nodi principali. Diciamo che vogliamo ottenere la posizione del personaggio sulla mappa. Calcoliamo:
(posizione del personaggio) + (posizione del nodo padre) + (posizione del nodo radice) = (1,0) + (10,10) + (0,0) = (11,0)
OK, quindi per tutto il tempo il tuo personaggio è rimasto sulla piattaforma. Che ne dici di saltare? Bene, nel momento in cui salta, lo si stacca dalla piattaforma e lo si attacca al nodo contenente la piattaforma ; in questo caso, la mappa (nodo radice).
Quando atterra di nuovo, attaccalo a qualsiasi nodo su cui è atterrato.