Pemain bergerak ke atas, apakah dia melompat atau memanjat?

11

Dalam permainan platformer berbasis fisika 2D yang memiliki tangga di dalamnya, bagaimana Anda menentukan apakah pemain bergerak disebabkan oleh lompatan atau dia menaiki tangga, sehingga Anda tahu animasi apa yang harus dimainkan?

Dan secara umum, jelas vektor arah tidak cukup untuk menentukan animasi yang akan diputar: bagaimana Anda juga menentukan penyebab gerakan (sehingga Anda tahu sprite yang tepat untuk digunakan)?

Paul Manta
sumber
1
Jika seorang pemain berada di tangga, apakah dia benar-benar di udara?
Derek

Jawaban:

15

Saya memiliki masalah logika pribadi secara teratur yang sepertinya Anda ungkapkan di sini. Terkadang Anda melihat logika dan pemrograman dari arah yang salah sepenuhnya. Dalam hal ini, Anda tampaknya tidak menyadari bahwa sejak awal Anda tahu mana yang terjadi, karena kode logika. Anda seharusnya sudah tahu, secara pemrograman, apakah dia ada di tangga atau tidak.

Pikirkan itu (seperti yang saya katakan, saya sering mengalami masalah ini). Logika permainan seharusnya tahu Anda berada di tangga, seandainya Anda menjadi programmer yang cerdas. Untuk penjelasan yang lebih baik, saya memiliki tipe arsip file, dan menyia-nyiakan sekitar satu jam sehari mencoba mencari cara untuk mendapatkan ukuran data dan saya tidak pernah berhenti untuk berpikir bahwa, ketika saya memuat dalam file, saya sekarang tahu ukurannya: P.

Alasan mengapa ini berhubungan sangat eksklusif, adalah bahwa Anda melihatnya sebagai "Sekarang saya di udara, bagaimana saya mencari tahu apakah saya di tangga atau melompat?" ... Ketika Anda harus benar-benar pikirkan "Saya akan naik ke udara, tetapi dengan metode yang PERTAMA, sehingga saya dapat menggunakannya untuk penggunaan animasi."

Joshua Hedges
sumber
Sederhana misalnya: OnJump()ubah jumpingboolean Anda menjadi true, dan kemudian jika Anda berada di udara dan jumpingsalah, maka Anda jatuh atau menaiki tangga, dll.
Joshua Hedges
6

Sistem fisika tidak tahu atau tidak peduli mengapa pemain bergerak ke arah tertentu. Ini adalah gim Anda yang menyebabkan sistem fisika menggerakkan pemain ke arah itu, dan karenanya merupakan tanggung jawab gim Anda untuk melacaknya. Entitas pemain harus memiliki beberapa status di atasnya yang akan memberi tahu apakah itu melompat, memanjat, berlari, dll. Anda seharusnya tidak mencoba untuk mencari tahu ini berdasarkan apa yang terjadi dengan sistem fisika.

Nicol Bolas
sumber
2

Tampaknya peristiwa apa pun yang dipicu pada tabrakan yang menetapkan kecepatan vertikal pemain juga dapat digunakan untuk menetapkan bendera yang menentukan animasi apa yang akan digunakan.

Jika Anda menggunakan pustaka pihak ke-3 yang terlalu ketat dengan info apa yang diberikannya, Anda dapat mengelilingi tangga dengan persegi panjang dan jika pemain bergerak ke atas dan terkandung dalam persegi panjang itu maka lakukan animasi pendakian.

Klasik
sumber
Ini sebenarnya memunculkan poin bagus yang akan saya bahas nanti dalam pengembangan game saya sendiri, dan itulah cara mengubah kecepatan animasi berdasarkan fisika. Saya memiliki karakter yang saya ingin mengibaskan lengan mereka secara prosedural, lebih cepat berdasarkan seberapa cepat mereka jatuh. Dan saya tidak pernah memikirkan cara yang baik untuk melakukannya secara mendalam (telah berpikir dari waktu ke waktu), tetapi kecepatan ide Anda jauh lebih baik. +1 untuk jawaban yang dapat digunakan secara umum, dan tidak khusus untuk kasusnya saja.
Joshua Hedges
1

Saat mengatur kecepatan lompat, atur juga status karakter ke STATE_JUMPING. Melakukan ini, Anda selalu tahu di negara mana pemain berada dan dapat bertindak sesuai dengan memeriksa negara pemain.

crisi
sumber