Menerapkan "Lompat Ganda" dengan Benar

23

Saya sedang mengerjakan game iPhone 2D menggunakan Corona (versi percobaan, jadi saya tidak bisa menggunakan forum mereka). Permainan ini melibatkan karakter yang jatuh di langit, dan saya mencoba menerapkan "lompatan ganda" untuk karakter tersebut, agar dia dapat melompat ke atas saat jatuh. Saya menggunakan perpustakaan fisika Corona untuk membuat karakter jatuh, dan sejauh ini metode terbaik untuk membuatnya melompat menggunakan metode impuls vertikal

object:applyLinearImpulse(0, -0.4, object.x, object.y)

Masalah yang saya hadapi adalah ketika karakter baru mulai (kecepatan vertikal rendah), dia melompat sangat tinggi, dan ketika dia jatuh untuk sementara waktu (kecepatan vertikal tinggi), lompatan diabaikan. Saya menduga bahwa solusi terbaik adalah dengan menggunakan semacam persamaan dengan kecepatan sebagai input untuk membuat lompatan yang sama terlepas dari kecepatan, tetapi saya tidak tahu apa persamaan itu.

Oke, jadi itu yang saya pikirkan. Pertanyaan akhirnya adalah, bagaimana tepatnya Anda menerapkan lompatan ganda dengan fisika? Apakah ada persamaan yang tepat untuk masalah saya? Haruskah saya mengambil pendekatan yang berbeda? Ini sudah pernah dilakukan sebelumnya dalam game seperti Smash Bros, jadi ada solusi yang berulang, kan?

Jesse J
sumber

Jawaban:

37

Cukup atur kecepatan vertikal ke nol, dan panggil kode yang sama yang Anda gunakan untuk melakukan lompatan pertama.

Adam Harte
sumber
4
Oh Itu ... sebenarnya bekerja cukup baik. Dan sangat sederhana sehingga saya sekarang merasa bodoh karena tidak memikirkannya. Baiklah. Terima kasih!
Jesse J
5
Sering tergoda untuk membuat hal-hal lebih rumit daripada yang seharusnya :)
Adam Harte
2
jawaban yang elegan!
lathomas64
1

Saya tidak yakin, tapi saya pikir game seperti UT2K4 mungkin menggunakan logika seperti ini:
if (sudah melompat &&! Berlipat ganda melompat &&! Menyentuh tanah && velocity.up kira-kira 0,0f) DoDoubleJump ();

Di mana naik adalah komponen y atau z Anda (Tergantung yang mana berada di atas)
Ini berarti bahwa pemain Anda hanya dapat melakukan lompatan ganda ketika mereka berada di ketinggian maksimum lompatan pertama mereka dan baru akan mulai turun lagi.
Saya suka metode ini karena itu menciptakan sedikit keterampilan (Anda harus mengatur waktu untuk terjadi di dalam "velocity.up kira-kira 0,0f").
Bergantung pada apa yang Anda inginkan, Anda bisa membuat bias "sekitar 0,0f" ke arah angka positif sehingga mereka hanya bisa berlipat ganda ketika masih bergerak ke atas misalnya.

Chris
sumber