Membuat bola Box2D memantul ke ketinggian konstan

8

Saya ingin membuat game seperti Doodle Jump. Saya menggunakan libgdx dan Box2d. Saya membutuhkan saran tentang cara membuat bola saya memantul secara konstan dan dengan ketinggian yang sama.

Saya sudah mencoba mengatur ganti badan bola ke 1 sehingga bisa melompat terus-menerus, tetapi ketika saya melompat pada blok, "dorongan" lebih kecil. Saya juga mencoba mendeteksi tabrakan, kemudian menerapkan impuls tetapi tidak berhasil juga.

Bagaimana saya bisa membuat bola memantul ke ketinggian yang sama setiap kali?

Ion Farima
sumber
6
Anda mungkin ingin mempertimbangkan untuk meluncurkan "fisika" Anda sendiri daripada menggunakan box2d. Gim seperti lompatan doodle tidak akan membutuhkan terlalu banyak pekerjaan untuk diselesaikan tanpa mesin fisika.
jgallant

Jawaban:

15

masukkan deskripsi gambar di sini

Ketika bola (kurva lintasan merah) mengenai blok lebih tinggi (kotak biru), itu akan bergerak lebih lambat daripada ketika memukul blok lebih rendah ke bawah (kotak hijau). Karenanya mengapa tidak memantul lebih tinggi dari tempat asalnya.

Secara fisik, ini masuk akal.

Doodle Jump jelas tidak akurat secara fisik. Jika Anda menginginkan efek seperti di Doodle Jump di mana impuls dari tabrakan selalu sama, Anda harus mengatur sendiri kecepatan vertikal ke nilai tertentu setiap kali tabrakan terjadi, dengan ball.speed.y = 7;atau serupa.

Anko
sumber
2

Dunia Box2D menggunakan redaman dan gesekan, pertimbangkan bahwa dunia mungkin menerapkan redaman pada objek Anda saat disimulasikan.

Evan
sumber
1

Saya juga ingin melempar ke dalam campuran yang mungkin tidak perlu menggunakan mesin fisika untuk ini. Bergantung pada bagaimana tabrakan game Anda ditangani (khususnya, respons tabrakan), Anda mungkin menemukan bahwa Anda dapat membuat sistem kotak pembatas yang sangat sederhana yang dapat Anda kendalikan sepenuhnya. Bahkan, dalam permainan gaya "doodle jump" itu bahkan lebih mudah. Daripada khawatir tentang mendeteksi tabrakan di box2d dan mencari tahu apakah tabrakan harus dinonaktifkan atau tidak (misalnya Anda menekan platform dari bawah), skenario lompatan doodle sebenarnya jauh lebih sederhana. Jika bola Anda bergerak "turun" (y menurun) dan ia melewati nilai y platform, dan itu berada dalam batas kiri / kanan platform, maka bola itu bertabrakan. Satu-satunya hal yang benar-benar "rumit" adalah jalur penerbangan parabola yang akan Anda ambil,http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordinates ).

Tabrakan dengan item lain di dunia yang tidak memerlukan respons (misalnya memukul bonus) dapat dengan mudah diselesaikan hanya dengan kotak terikat.

Box2D sangat fenomenal, tetapi seringkali berlebihan jika Anda memiliki persyaratan sederhana .. IMO.

Jason
sumber
0

Ingat (nilai float = velocity.y) kecepatan bola sebelum bertabrakan dengan platform, dan atur setelah bouncing: ball.velocity.y = value * (-1)

Mungkin Anda akan menarik untuk melihat di posting ini: posting
pertama posting
kedua

PS Saya tidak bisa mengirim kode di sini, silakan lihat di "posting pertama" di komentar terakhir. Ada kode bagaimana saya mengatasi masalah serupa.

Racoon
sumber