Pertama-tama, XNA juga menggunakan C # juga jadi itu bahasa pemrograman yang sama. Dan meskipun API yang mendasari mungkin memiliki beberapa perbedaan dari DirectX, itu tidak ada hubungannya dengan melompat, jadi tutorial atau jawaban yang sama harus diterapkan di sini. Juga, ada banyak cara untuk mengimplementasikan ini, tergantung pada banyak faktor. Apa yang akan saya uraikan di bawah ini hanyalah salah satu kemungkinan.
Persyaratan Fisika Dasar
Pertama, Anda perlu beberapa variabel fisika dasar dan perhitungan pada loop pembaruan Anda. Secara khusus, Anda memerlukan posisi, kecepatan, dan gravitasi yang ditentukan, dan loop pembaruan Anda harus melakukan sesuatu yang mirip dengan ini (deteksi tabrakan dan respons dihilangkan untuk kesederhanaan):
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
Tetap Tinggi Lompat
Sekarang cara termudah untuk menerapkan lompatan yang selalu memiliki ketinggian yang sama, tidak peduli berapa lama Anda menekan tombol, adalah dengan mengubah kecepatan vertikal sekali. Ini akan membuat karakter mulai naik, sementara gravitasi secara otomatis akan membantu menjatuhkannya:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Penting Anda tidak ingin bisa memulai lompatan jika karakter Anda tidak berada di tanah, jadi Anda harus menambahkan tanda centang untuk itu.
Tinggi Variabel Lompat
Tetapi permainan seperti Mario dan Sonic memiliki lompatan variabel di mana ketinggian lompatan tergantung pada berapa lama Anda menekan tombol ke bawah. Dalam hal ini Anda harus menangani menekan dan melepaskan tombol lompat. Anda dapat menambahkan sesuatu seperti:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Tweaking semua nilai-nilai ini (yaitu angka-angka seperti 0.5
, -12.0f
atau -6.0f
) dalam kode di atas Anda dapat mengubah nuansa lompatan Anda, seberapa tinggi ia melompat, berapa banyak momentum yang ia simpan bahkan setelah melepaskan tombol lompat, seberapa cepat ia jatuh, dll .
Penting Jangan panggil fungsi-fungsi ini setiap frame. Panggil mereka hanya sekali ketika tombol ditekan atau dilepaskan. Kalau tidak, karakter Anda akan terbang bukannya melompat.
Contoh Kerja
Saya baru saja membuat contoh cepat dari teknik yang dijelaskan di atas, yang dapat Anda coba di browser Anda di sini (tekan tombol mouse untuk melompat, lepaskan di tengah jalan untuk mengontrol ketinggian lompatan). Ada dalam JS tapi seperti yang saya sebutkan sebelumnya, bahasanya tidak relevan dalam kasus ini.
http://jsfiddle.net/LyM87/