Bagaimana saya bisa membuat karakter berdiri di lereng?

8

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: Karakter utama Limbo berdiri di lereng Karakter utama Limbo berdiri di tanah yang datar
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: Kita dapat melihat bahwa sprite mengikuti tanah tempat ia berdiri, sehingga kaki karakter berada di lantai tetapi tulang punggungnya tidak tegak lurus terhadap cakrawala tetapi lebih ke tanah

Jika saya menonaktifkan rotasi saya akan mendapatkan sesuatu yang lebih seperti ini: Di sini tulang belakang tegak lurus terhadap cakrawala tetapi kaki karakter tidak menyentuh lantai.  Bahkan hanya ada sudut sprite yang menyentuh lantai
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: masukkan deskripsi gambar di sini
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?

Trevör
sumber
1
Coba berdiri di lereng sendiri dan lihat bagaimana hasilnya. Ketika Anda meletakkan satu kaki di depan yang lain maka kaki yang lebih tinggi harus ditekuk untuk mengkompensasi kemiringan. Jadi pendekatan Anda dengan banyak sendi adalah pilihan yang baik.
Eejin
@Eejin Ok terima kasih, dan bagaimana dengan realisme grafis di tingkat sambungan? Apa yang bisa saya lakukan menautkannya secara alami? Agar tidak terlihat seperti ada beberapa node?
Trevör
Itu tergantung pada beberapa aspek gim Anda. Tentu saja bagian tubuh yang digambar dengan baik membantu. Bisakah Anda memberi sedikit lebih banyak informasi tentang ukuran dan seberapa penting detail sempurna itu?
Eejin
Jika tanah Anda selalu, katakanlah, rumput tinggi, hanya menggunakan titik rendah dari sprite mungkin tidak apa-apa karena kaki karakter akan dikaburkan ke titik di mana Anda tidak bisa tahu bagaimana mereka berdiri.
jzx
Saya tidak tahu tentang SpriteKit, tetapi banyak game yang merepresentasikan pemain sebagai bentuk "kapsul" atau "pil" daripada persegi panjang. Juga, objek fisika biasanya lebih kecil dari sprite itu sendiri.
Thane Brimhall

Jawaban:

6

Untuk memperluas jawaban Josh Petrie, menemukan sudut kaki juga cukup mudah.

masukkan deskripsi gambar di sini

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.

igrad
sumber
5

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