Bagaimana saya bisa membuat ledakan bom di Farseer yang mendorong benda-benda terdekat?

14

Saya mencoba membuat ledakan bom di Farseer. Saya membuat lingkaran untuk bom. Namun, jika bom meledak, benda (tubuh) yang ada di sekitarnya harus terbang menjauh karena didorong kembali oleh kekuatan ledakan yang sangat besar. Saya tidak yakin bagaimana cara menciptakan kekuatan itu - bagaimana saya bisa melakukannya?

Homer Simpson
sumber
Patut ditunjukkan bahwa Farseer hadir dengan sampel yang menerapkan ledakan. Ini "AdvancedDemo5" (di sumber saat ini). Ini mirip dengan metode kedekatan dalam jawaban Classic Thunder yang luar biasa, hanya kurang canggih (impuls dengan magnitudo tetap dalam AABB).
Andrew Russell

Jawaban:

28

Saya akan merekomendasikan memeriksa halaman iforce2d ledakan . Ia melakukan pekerjaan yang luar biasa dalam berbagai cara menangani ledakan dengan pengorbanan kinerja vs akurasi. Ini membahas 3 metode yang akan saya rangkum di sini. Jadi ini adalah saya meringkas informasi yang saya temukan saat meneliti dan tidak ada yang merupakan karya saya sendiri.

Anda juga ingin menerapkan impuls di sini bukan kekuatan. Untuk memahami mengapa membaca ini .

Metode Kedekatan

Metode Kedekatan

Ini adalah metode yang sama yang dilakukan Byte56 dalam jawabannya. Konsepnya sederhana. Memiliki titik ledakan dan menerapkan dorongan pada arah yang berlawanan dari titik yang akan mempengaruhi semua benda dengan kekuatan berdasarkan jarak mereka.

Pro:

  • Sangat cepat
  • Mudah dikodekan.

Cons:

  • Ledakan melewati benda tak bergerak dan benda statis.
  • Objek yang berada di area pengaruh ledakan dapat dilewati jika Anda hanya memeriksa jarak ke pusat massa.
  • Luas permukaan tidak diperhitungkan.
  • Semuanya terpengaruh sekaligus.

Metode Raycast

Metode Raycast

Yang ini cukup sederhana, keluarkan sinar dari asal ledakan Anda dan berikan impuls ketika mereka bertabrakan dengan benda dengan dorongan yang ditentukan oleh jarak.

Pro:

  • Kinerja kurang intensif daripada metode proyektil.
  • Ledakan terhalang oleh benda.
  • Luas permukaan diperhitungkan.

Cons:

  • Semuanya terpengaruh sekaligus.
  • Semakin besar ledakan, semakin banyak sinar yang Anda butuhkan untuk memastikan ledakan mempengaruhi segalanya.
  • Kinerja lebih intensif daripada metode kedekatan.

Metode Partikel

Metode Partikel

Favorit pribadi saya. Mirip dengan metode RaySasting tetapi bukannya sinar Anda memanfaatkan mesin fisika dan memuntahkan pelet kecil yang berinteraksi dengan adegan Anda.

Pro:

  • Kode-bijaksana sangat mudah. Hasilkan bola dan terapkan dorongan untuk masing-masing bola. Anda tidak memiliki kode untuk ditulis per centang. Hanya memiliki timer yang berjalan dan menonaktifkan / me-reset tubuh setelah ledakan selesai.
  • Ledakan diblokir oleh benda.
  • Luas permukaan diperhitungkan.
  • Ledakan memantul dari permukaan.
  • Objek lebih jauh dari ledakan meresponnya dengan lebih lambat.
  • Anda dapat menggunakan bola sebagai dasar untuk menghasilkan parsial yang memungkinkan efek Anda untuk secara akurat mencerminkan dampak ledakan.

Cons:

  • Menambahkan kompleksitas per-centang.
Klasik
sumber
5
Jawaban yang sangat bagus Saya terutama menyukai metode partikel. Sepertinya itu akan membuatnya lebih sulit untuk mendapatkan ledakan yang kuat . Apakah sepele membuat partikel lebih tinggi?
MichaelHouse
1
Ini sepele untuk efek semua aspek fisik partikel, kepadatan yang paling relevan, kecepatan, dan redaman. Mengangkat kepadatan ke atas dan mengatur kecepatan tinggi akan membuat Anda membuat ledakan kekerasan yang lucu.
ClassicThunder
Apakah Anda membuat partikel ledakan melambat dengan sengaja, atau hanya seluruh animasi berhenti. Masuk akal untuk menambahkan gesekan konstan pada partikel.
ini
@self Box2D memungkinkan Anda untuk menambahkan redaman liner ke objek yang memperlambatnya secara linier pada tingkat tertentu, ini adalah teknik yang digunakan dalam gif.
ClassicThunder
1
Jawaban yang sangat bagus :) Saya akan menambahkan satu lagi pro ke metode terakhir, di mana Anda bisa menggunakan posisi pelet untuk menggambar asap atau debu yang terlihat bagus.
iforce2d
2
  • Pilih semua objek dalam radius pengaruh bom.
  • Untuk setiap objek
    • Gunakan posisi objek dan pusat ledakan untuk menghitung vektor impuls. Sesuatu seperti normalize(object - center).
    • Gunakan jarak dari pusat bom ke objek untuk menghitung besarnya impuls. Sesuatu seperti(object - center).length
    • Terapkan impuls ke objek menggunakan vektor dan besarnya yang ditemukan pada langkah sebelumnya.

Sedangkan untuk menghitung besarnya Anda bisa mulai dengan falloff linear sederhana, kemudian pindah ke rumus lain jika Anda tidak menyukai hasilnya.

MichaelHouse
sumber
Pasukan adalah ketika Anda ingin mempengaruhi objek dari waktu ke waktu yang bukan situasi di sini. Akan lebih tepat untuk menerapkan impuls.
ClassicThunder
Maaf, saya katakan paksa, tetapi terkait dengan impuls.
MichaelHouse