Solusi saya adalah memperlakukan setiap entitas fisik di peta permainan sebagai simpul pohon , dan peta itu sendiri sebagai simpul akar . Node dapat berisi node lain. Setiap node terkandung (langsung atau tidak langsung) di dalam node peta.
Misalnya, katakanlah karakter Anda berdiri di atas platform. Node platform berisi node karakter. Jadi, setiap kali platform bergerak, node yang dikandungnya (dalam hal ini karakter) akan bergerak juga.
Agar ini terjadi, setiap node harus memiliki posisi (x, y) relatif terhadap node induk . Misalnya, karakter Anda dapat berada di (1,0) relatif terhadap platform, yang itu sendiri dapat berada di (10,10) relatif terhadap peta game. Dengan begitu, jika platform bergerak, karakter Anda akan bergerak bersama secara implisit.
Dalam hierarki pohon ini, posisi setiap simpul sama dengan jumlah posisinya ditambah setiap posisi simpul orang tuanya. Katakanlah kita ingin mendapatkan posisi karakter di peta. Kami menghitung:
(posisi karakter) + (posisi simpul orangtua) + (posisi simpul akar) = (1,0) + (10,10) + (0,0) = (11,0)
OK, jadi selama ini karakter Anda telah berdiri di platform. Bagaimana dengan melompat? Nah, saat dia melompat, Anda melepaskannya dari platform dan melampirkannya ke node yang berisi platform ; dalam hal ini, peta (node root).
Ketika dia mendarat lagi, lekatkan dia ke simpul mana pun dia mendarat.
Saya akan menyarankan memperlakukan ini sebagai masalah pseudo-fisika dan menyelesaikannya dengan menggunakan gesekan tanah.
Anda sudah menggunakan gravitasi untuk menahan karakter di tanah, ini menangani situasi di mana platform bergerak naik dan turun. Untuk menangani gerakan kiri dan kanan, tanah harus memberikan banyak gesekan pada karakter. Biasanya tingkat gesekan ini adalah 1,0, atau 100%.
Jika karakter berdiri diam, maka kecepatannya adalah 0, dan mereka sebaliknya mewarisi 100% dari kecepatan platform karena gesekan. Sesuatu seperti yang berikut ini:
Manfaat dari pendekatan ini adalah bahwa ia dengan mudah cocok untuk mekanika platform tambahan, seperti mampu mengatasi gesekan pada lereng curam, memungkinkan karakter Anda untuk meluncur. Ini juga memungkinkan Anda untuk dengan mudah mengurangi gesekan untuk membuat es yang akan digeser oleh karakter.
Juga lebih mudah untuk menangani masalah seperti dinding yang menggantung rendah yang dapat menjatuhkan pemain Anda dari platform yang bergerak. Jika Anda hanya memperlakukan karakter sebagai anak dari platform induk, ada kemungkinan ia tidak akan berinteraksi dengan mudah dengan sisa deteksi tabrakan Anda tanpa banyak pekerjaan.
sumber
Anda mungkin memperbaiki posisi pemain bukan "absolut dalam level" tetapi "relatif terhadap platform", lalu memiliki fungsi yang memberikan posisi aktualnya. Saya tidak suka ini.
Mungkin akan lebih baik (dan lebih sederhana) untuk mengikat pemain ke platform sehingga ketika platform bergerak + x / + y, pemain bergerak sebanyak mungkin.
sumber