Bagaimana cara membuat mesin fisika 2D? [Tutup]


20

Gim paling canggih yang saya buat adalah gim biliar 8 bola yang dibuat dengan mesin fisika Box2dFlashAS3 dan gim platform dengan level.

Ketika saya melakukan permainan platform, saya selalu ingin tahu cara membuat mesin, sehingga saya bisa menggunakannya kembali. Ketika saya melihat game yang memiliki lereng, lereng melengkung, gravitasi sempurna dan fisika kehidupan nyata, saya selalu berharap saya tahu cara membuat kode mesin.

Harap sarankan teknik dan artikel untuk basis pengetahuan apa pun yang relevan yang diperlukan.


Jawaban:


16

Walaupun saya merekomendasikan untuk tidak menggulirkan mesin fisika Anda sendiri untuk apa pun selain pengalaman melakukannya (hanya sadari Anda mungkin harus membuangnya begitu selesai - sangat sulit untuk mendapatkan semua edgecases dan masalah numerik batas / stabilitas diselesaikan. , dan waktu Anda mungkin jauh lebih baik digunakan dengan berkontribusi pada mesin yang ada), berikut adalah beberapa sumber daya:

Pelajaran Pool Hall: Deteksi Tabrakan Cepat, Akurat Antara Lingkaran atau Lingkaran membahas lingkaran / lingkaran dan benturan bola / bola.

The N Tutorial indah untuk pemahaman dasar tentang deteksi dan respon berbasis Teorema Memisahkan Axis.


9

Erin Catto memiliki semua kuliah GDC tentang implementasi Box2D secara online. Box2D juga memiliki kode yang mudah dibaca, menurut pengalaman saya.


pdf adalah bahan yang sangat sulit. Tapi, ketika saya membaca file cpp dan h, seperti yang Anda katakan, mereka "dimengerti". Terima kasih.
Wisnu

+1. Box2D juga sangat berhati-hati tentang stabilitas, salah satu hal yang sangat sulit ketika Anda menggulung sendiri.
Leander

5

Inilah cara Anda melakukannya:

Perkiraan gerakan

Setiap objek fisika membutuhkan vektor-vektor ini:

  • Posisi : Di mana objek berada.
  • Kecepatan : Bagaimana posisinya berubah.
  • Akselerasi : Bagaimana kecepatannya berubah.

Jadi, secara intuitif, Anda perlu melakukan hal semacam ini setiap frame ke setiap objek fisika a:

a.speed    += a.acceleration
a.position += a.speed

Jebakan : Ini dikenal sebagai metode integrasi Euler . Perkiraan ini lebih baik untuk kecepatan dan akselerasi kecil dan dengan langkah waktu yang kecil. Dalam permainan, ini biasanya benar. Tetapi jika suatu benda bergerak sangat cepat menuju dinding tipis atau langsung menuju benda bergerak lain, benda itu dapat melewati tabrakan dengan benda itu ketika posisinya bertambah dengan jumlah yang cukup besar untuk melewatinya seluruhnya. Jika Anda memiliki objek yang bergerak cepat, Anda mungkin perlu Deteksi Tabrakan Berkesinambungan untuk lolos dari ini.

Tabrakan

Tabrakan dapat diperkirakan dengan urutan semacam ini:

  1. Deteksi : Terdeteksi bahwa dua tubuh berpotongan.
  2. Resolusi : Posisi masing-masing badan diubah sehingga mereka tidak lagi berpotongan.
  3. Fisika : Kecepatan setiap tubuh diubah untuk memperhitungkan momentum, gesekan, dan pemulihan (bounciness).

Ini dikenal sebagai Deteksi Tabrakan Terpisah, seperti yang terjadi pada titik-titik diskrit dalam waktu. Setiap langkah patut mendapat perhatian:

Langkah 1: Deteksi tabrakan (Apakah ada yang bertabrakan?)

Untuk dua lingkaran : Cukup periksa apakah pusat mereka lebih dari jumlah jari-jari mereka.

Untuk dua persegi panjang : Periksa apakah ada salah satu koordinat sudut mereka dalam persegi panjang lainnya.

Untuk apa pun yang melibatkan poligon yang lebih kompleks , Anda membutuhkan Teorema Pemisah , yang merupakan topik untuk pertanyaan lain.

Jebakan : Ada banyak jenis tumbukan lainnya yang mungkin ingin Anda pertimbangkan. Beberapa sangat kompleks: Poligon cembung mungkin berpotongan beberapa kali !

Langkah 2: Resolusi tabrakan (Pisahkan keduanya)

Metode sederhana untuk menyelesaikan tabrakan adalah terjemahan dengan penetrasi minimum , menggunakan nilai yang diperoleh dari deteksi tabrakan. Ini pada dasarnya melibatkan memindahkan objek secara terpisah dengan jarak gerakan seminimal mungkin.

Sebagai contoh, perhatikan tumbukan lingkaran-lingkaran di mana salah satu lingkaran diperbaiki di tempatnya. Vektor perpindahan minimum memiliki arah yang sama dengan perbedaan antara vektor titik tengahnya. Panjangnya adalah perbedaan antara jumlah jari-jari mereka dan jarak antara pusat.

Gagasan ini dengan mudah digeneralisasikan ke bentuk lain.

Jebakan : Jika kedua benda yang bertabrakan dapat dipindah, Anda mungkin harus memindahkan keduanya dengan sebagian kecil dari keseluruhan jarak untuk mendapatkan perkiraan gerakan mereka yang dapat dipercaya. Mereka jelas harus bergerak ke arah yang berbeda.

Langkah 3: Fisika tabrakan (Perubahan lainnya.)

Hal yang paling jelas yang cenderung terjadi adalah bahwa satu atau dua objek berubah arah yaitu memutar vektor kecepatannya. Ini cukup mudah diimplementasikan.

Jebakan : Objek mungkin elastis , tetapi mungkin tidak , dalam hal ini total energi dalam sistem berkurang. Anda mungkin perlu tarik karena hambatan udara. Gesekan (terutama gesekan statis ) terkenal rumit untuk diterapkan .

Beberapa kesimpulan

Simulasi realitas secara eksponensial lebih sulit jika ingin disimulasikan. Anda sedang berjalan ke ladang ranjau kasus-kasus tepi yang tak terhitung jumlahnya, formula yang sulit diingat dan tumpukan makalah penelitian yang terus tumbuh.

Jika kebutuhan Anda sederhana atau Anda ingin mempelajarinya, cobalah.

Jika kebutuhan Anda rumit atau Anda tidak menyukai matematika, dapatkan mesin fisika untuk menyelami detail untuk Anda. Box2D dan Bullet cukup populer di gim.




Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.