Walaupun saya belum pernah bekerja dengan mesin fisika peluru, saya telah melakukan sesuatu yang sangat mirip pada mesin fisika lain. Cara saya memecahkannya adalah dengan mengatur kecepatan linear tubuh kaku daripada menerjemahkannya secara langsung. Gerakan dan tabrakan kemudian secara otomatis ditangani oleh fase pembaruan mesin fisika.
Dari dokumentasi sepertinya ada btRigidBody::setLinearVelocity
metode yang dapat Anda gunakan. Jadi misalnya, jika Anda tidak ingin terjadi akselerasi, cukup atur kecepatan linier ke nilai yang sesuai setiap kali karakter bergerak, dan atur kembali ke (0,0,0) ketika karakter seharusnya berhenti (yaitu ketika pemain melepaskan kunci).
Adapun nilai yang digunakan, pendekatan yang biasa akan dimulai dengan kecepatan yang diinginkan dari karakter Anda (sebagai float / skalar) dan kemudian kalikan dengan vektor yang dinormalisasi yang menunjuk ke arah yang ingin Anda pindahkan. Dari apa yang saya lihat btVector3
kelas sudah memiliki metode untuk semua ini.
Sebagai alternatif, Anda dapat mempertimbangkan memperlakukan karakter sebagai objek fisika lengkap, dan menangani gerakan menggunakan metode applyForce
atau applyImpulse
. Ini akan menghasilkan akselerasi tubuh, sehingga karakter Anda akan memiliki momentum dan hasilnya mungkin akan terlihat lebih baik dengan cara ini. Tetapi Anda perlu mengambil beberapa langkah tambahan, misalnya, dengan memastikan kecepatan linier tidak pernah melebihi batas tertentu, baik dengan menjepitnya atau bermain-main dengan redaman / gesekan. Jadi akan sedikit lebih sulit untuk mengimplementasikan dan finetune.
Percobaan dengan kedua pendekatan dan kemudian pilih salah satu yang berperilaku paling dekat dengan kebutuhan Anda.