Pertama-tama, perhatikan bahwa saya ingin memahami prinsipnya, jadi saya lebih suka penjelasan dalam bahasa Inggris yang sederhana (tapi tentu saja saya tidak menentang beberapa kode untuk melengkapi penjelasan ini).
Saya bertanya-tanya apa cara membuat karakter melangkah dengan benar di lereng, mari kita mulai dengan dua tangkapan layar dari permainan Limbo untuk menunjukkan kepada Anda apa yang saya maksud:
Jadi, seperti yang Anda lihat pada gambar-gambar ini, sepertinya tulang punggung karakter sebenarnya tegak lurus terhadap cakrawala dan bukan ke permukaan tanah dan pengamatan ini membawa saya ke pertanyaan saya:
Bagaimana Anda bisa mereproduksi perilaku seperti itu dengan Sprite Kit? Karena jika saya memasang tubuh fisik ke sebuah simpul, saya memiliki kemungkinan untuk membiarkannya berputar, jadi saya akan mendapatkan sesuatu seperti ini:
Jika saya menonaktifkan rotasi saya akan mendapatkan sesuatu yang lebih seperti ini:
Seperti yang Anda lihat cara-cara untuk melakukan keduanya menyajikan masalah penting dan tidak terlihat alami sama sekali. Jadi bagaimana yang harus saya lakukan agar terlihat alami? Saya berpikir untuk membuat beberapa sprite dan beberapa badan fisika dan kemudian memasangnya bersama-sama dengan sambungan. Saya tidak berpikir itu akan terlihat alami karena jika Anda melihat ini:
Meskipun saya secara fisik dapat menghubungkan simpul-simpul ini, bagaimana saya akan membuatnya terlihat nyata secara grafis? Karena pada kenyataannya, misalnya, paha dan betis dihubungkan oleh lutut ...
Ada ide?
Jawaban:
Untuk memperluas jawaban Josh Petrie, menemukan sudut kaki juga cukup mudah.
Sudut kaki sama dengan sudut permukaan miring. Karena kami memiliki dua titik pada lereng itu, kami dapat menemukan sudut kemiringan (juga memungkinkan untuk menggunakan dua sudut bentuk segitiga lereng, tetapi lereng bertahap akan menjadi lebih rumit; untuk perbukitan, ini adalah solusi terbaik). Pada akhirnya, kemiringannya adalah H / P (dengan asumsi tumit kaki bengkok tepat di bawah pinggul yang sesuai), atau arctan (H / P) rad. Menggunakan cosinus, orang dapat dengan mudah menemukan bahwa H = (F + T) - (Fcosθ + Tcosφ).
Sudut kaki menjadi arctan ((F (1-cosθ) + T (1-cosφ)) / P)
PS: Jika Anda ingin BENAR-BENAR masuk, Anda juga bisa menemukan lebar tambahan untuk P.
PSS: Kaki hanya akan menekuk ke atas, jadi ingatlah itu sebelum Anda mencoba mendaki lereng 80 derajat.
PSSS: Orang-orang tidak memanjat bukit dengan tumit mereka, tetapi mereka bergantung pada mereka. Menjaga agar telapak tetap rata di atas bukit bisa menggambarkan pemain yang berdiri di atas jari-jari kaki dengan akurat, dan membiarkan tumitnya jatuh ke tanah sementara pemalasan bisa membuat gerakan yang sangat realistis.
sumber
Ada solusi dan trik sederhana yang dapat Anda gunakan (misalnya, jika lereng Anda semua akan menjadi sudut tetap, cukup buat sprite tambahan untuk gerakan miring dan menganggur, berikan mekanisme untuk kode permainan Anda untuk mengetahui apakah Anda berada di permukaan yang miring, dan render sesuai - inilah yang biasanya dilakukan oleh game berbasis sprite yang lebih lama).
Solusi umum, memperluas ide sprite multi-jointed Anda, adalah dengan menggunakan kinematika terbalik untuk menyelesaikan penempatan kaki karakter ( lihat juga ).
Ini melibatkan mendefinisikan struktur kerangka logis untuk karakter Anda, diwakili secara visual oleh beberapa sprite berbeda (untuk tubuh, sebanyak bagian kaki yang Anda butuhkan, dan kaki). End-effector dalam sistem ini adalah posisi kaki karakter pada kemiringan, yang dapat dihitung dari posisi batang tubuh (tetap) dan beberapa gagasan mengenai kaki mana yang ada di depan, berdasarkan kerangka siklus berjalan saat ini. Di antara dua posisi yang diketahui itu, sistem IK dapat menyelesaikan parameter untuk sambungan tungkai dan membuat perkiraan yang masuk akal tentang bagaimana setiap biped yang nyata dapat menstabilkan dirinya pada permukaan yang miring.
IK sering dinyatakan sebagai masalah 3D, tetapi dapat direduksi menjadi ruang 2D yang relatif mudah. Dalam 2D, Anda tidak perlu berputar-putar dengan batasan rotasi sendi yang hampir sama untuk membuat gerakan realistis seperti yang Anda lakukan dalam 3D, yang bagus.
Ini adalah metode yang digunakan oleh banyak game 2D modern, terutama mengingat tren komposisi sprite berbasis skeletal untuk karakter, daripada teknik yang lebih tua dalam mengarang setiap frame.
sumber