Saat ini saya membuat game dalam C # menggunakan Direct X 9.0. Game remake adalah Donkey Kong NES. Saya hampir menyelesaikan semuanya, tetapi saya memiliki masalah dengan fisika lompatan Mario. Saya memiliki variabel yang dideklarasikan untuk koordinasi Y dan X.
Saya bertanya-tanya apakah ada metode sederhana untuk melakukan ini. Saya telah mencari tinggi dan rendah untuk jawaban tetapi jawaban yang saya temukan tidak relevan / atau menggunakan bahasa pemrograman yang berbeda seperti XNA.
Saat ini saya memiliki set variabel bool untuk memeriksa untuk melihat apakah W telah ditekan maka itu akan memicu kode apa saja untuk membuatnya melompat. Saya telah bermain-main seperti.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
Yang tidak bekerja dengan baik. Saya telah mencari jawaban yang tinggi dan rendah dan sekarang saya putus asa, jika seseorang dapat mengarahkan saya ke arah yang benar untuk solusi sederhana. Itu akan bagus. Sangat dihargai atas tanggapan apa pun.
Jawaban:
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):
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:
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:
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/
sumber
Seperti dalam fisika. Hanya pada saat Anda menekan
jump key
dan karakter berada di tanah menambahkan kecepatan ke atas (disebut impuls), tetapi membuat karakter jatuh oleh gravitasi sepanjang waktu.Jika Anda tidak ingin karakter melompat setiap kali menyentuh tanah - karena Anda memegang
jump key
- tambahkanjump key is being pressed
variabel yang Anda hapus setelahjump key
dilepaskan dan ditetapkan setelah. Kodesemu:Jika saya menggunakan cara Anda:
Bagaimana
donkey.y
perubahan akan tergantung pada imajinasi Anda. Kecepatannya harus semakin kecil keledai lebih tinggi di udara agar terlihat bagus.sumber