Ada satu hal yang membingungkan saya, dan itu adalah bagaimana menerapkan lompatan 'impuls-impuls' pada platformer. Jika Anda tidak tahu apa yang saya bicarakan, maka pikirkan lompatan Mario, Kirby, dan Kutipan dari Cave Story. Apa kesamaan mereka? Nah, ketinggian lompatan Anda ditentukan oleh berapa lama Anda terus menekan tombol lompat.
Mengetahui bahwa 'impuls' karakter ini dibangun bukan sebelum lompatan mereka, seperti dalam fisika aktual, tetapi saat berada di udara - yaitu, Anda dapat dengan baik mengangkat jari Anda di tengah ketinggian maksimal dan itu akan berhenti, bahkan jika dengan penghancuran antara itu dan berhenti penuh; itulah sebabnya Anda cukup mengetuk hop dan menahannya untuk lompat jauh -, saya terpesona oleh bagaimana mereka menjaga trajetories mereka sebagai busur.
Implementasi saya saat ini berfungsi sebagai berikut:
Ketika tombol lompat ditekan, gravitasi dimatikan dan koordinat Y avatar dikurangi dengan nilai gravitasi yang konstan. Misalnya, jika semuanya jatuh pada Z unit per tick, itu akan naik Z unit per tick.
Setelah tombol dilepaskan atau batas tercapai, avatar akan mengalami dekaserasi dalam jumlah yang akan membuatnya mencakup unit X hingga kecepatannya mencapai 0; setelah itu, ia mempercepat sampai kecepatannya cocok dengan gravitasi - berpegang pada contoh, saya bisa mengatakan itu mempercepat dari 0 hingga Z unit / centang sambil masih mencakup X unit.
Implementasi ini, bagaimanapun, membuat lompatan terlalu diagonal, dan kecuali kecepatan avatar lebih cepat daripada gravitasi, yang akan membuatnya terlalu cepat dalam proyek saya saat ini (bergerak sekitar 4 piksel per kutu dan gravitasi 10 piksel per kutu, pada framerate dari 40FPS), itu juga membuatnya lebih vertikal daripada horizontal. Mereka yang akrab dengan platformer akan melihat bahwa lompatan karakter busur hampir selalu memungkinkan mereka untuk melompat lebih jauh bahkan jika mereka tidak secepat gravitasi permainan, dan ketika itu tidak, jika tidak dimainkan dengan benar, akan membuktikan dirinya sebagai sangat kontra-intuitif. Saya tahu ini karena saya bisa membuktikan bahwa implementasi saya sangat menjengkelkan.
Adakah yang pernah mencoba mekanik serupa, dan mungkin bahkan berhasil? Saya ingin tahu apa yang ada di balik platformer jumping ini. Jika Anda belum pernah memiliki pengalaman dengan ini sebelumnya dan ingin mencobanya, maka tolong, jangan mencoba untuk memperbaiki atau meningkatkan implementasi yang saya jelaskan, kecuali saya berada di jalan yang benar - cobalah untuk membuat solusi dari menggaruk. Saya tidak peduli jika Anda menggunakan gravitasi, fisika atau yang lainnya, asalkan itu menunjukkan bagaimana impuls semu ini bekerja, itu berhasil.
Juga, saya ingin presentasinya untuk menghindari pengkodean khusus bahasa; seperti, membagikan contoh C ++, atau Delphi ... Sebanyak saya menggunakan kerangka XNA untuk proyek saya dan tidak akan keberatan dengan barang C #, saya tidak punya banyak kesabaran untuk membaca kode orang lain, dan saya pengembang game tertentu dari bahasa lain akan tertarik dengan apa yang kami capai di sini, jadi jangan keberatan tetap berpegang pada kode semu.
Terima kasih sebelumnya.