Làm thế nào tôi có thể tạo ra một vụ nổ bom trong Farseer để đẩy các vật thể gần đó đi?


14

Tôi đang cố tạo ra một vụ nổ bom ở Farseer. Tôi đã tạo ra một vòng tròn cho quả bom. Tuy nhiên, nếu quả bom phát nổ, các vật thể (cơ thể) xung quanh nó sẽ bay đi vì chúng bị đẩy lùi bởi lực nổ khổng lồ. Tôi không chắc chắn làm thế nào để tạo ra lực lượng đó, mặc dù vậy - làm thế nào tôi có thể làm điều đó?


Thật đáng để chỉ ra rằng Farseer đi kèm với một mẫu thực hiện vụ nổ. Đó là "AdvancedDemo5" (trong nguồn hiện tại). Nó tương tự như phương pháp lân cận trong câu trả lời xuất sắc của Classic Thunder, chỉ kém tinh vi (một xung lực có cường độ cố định trong AABB).
Andrew Russell

Câu trả lời:


28

Tôi khuyên bạn nên kiểm tra trang nổ iforce2d . Nó thực hiện một công việc tuyệt vời vượt qua nhiều cách xử lý vụ nổ khác nhau với hiệu suất so với sự đánh đổi chính xác. Nó đi qua 3 phương pháp mà tôi sẽ tóm tắt ở đây. Vì vậy, đây chỉ đơn giản là tôi tóm tắt thông tin tôi tìm thấy trong khi nghiên cứu và không ai trong số đó là công việc của riêng tôi.

Ngoài ra bạn muốn áp dụng các xung ở đây không phải là lực lượng. Để hiểu tại sao đọc cái này .

Phương pháp tiệm cận

Phương pháp tiệm cận

Đây là cùng một phương pháp mà Byte56 đi qua trong câu trả lời của mình. Khái niệm này là đơn giản. Có một điểm nổ và đặt một xung theo hướng ngược lại với điểm sẽ ảnh hưởng đến tất cả các vật thể có cường độ dựa trên khoảng cách của chúng.

Ưu điểm:

  • Rất nhanh
  • Dễ mã.

Nhược điểm:

  • Vụ nổ xuyên qua các vật thể bất động và các vật thể tĩnh.
  • Các vật thể nằm trong vùng ảnh hưởng của vụ nổ có thể bị bỏ qua nếu bạn chỉ kiểm tra khoảng cách đến tâm khối lượng.
  • Diện tích bề mặt không được tính đến.
  • Mọi thứ đều bị ảnh hưởng cùng một lúc.

Phương pháp Raycast

Phương pháp Raycast

Cái này đủ đơn giản, chiếu ra các tia từ nguồn gốc vụ nổ của bạn và áp dụng các xung khi chúng va chạm vào một vật thể với một xung lực được điều khiển bởi khoảng cách.

Ưu điểm:

  • Hiệu suất ít hơn so với phương pháp đạn.
  • Vụ nổ bị chặn bởi các vật thể.
  • Diện tích bề mặt được tính đến.

Nhược điểm:

  • Mọi thứ đều bị ảnh hưởng cùng một lúc.
  • Vụ nổ càng lớn, bạn càng cần nhiều tia để đảm bảo vụ nổ ảnh hưởng đến mọi thứ.
  • Hiệu suất chuyên sâu hơn phương pháp lân cận.

Phương pháp hạt

Phương pháp hạt

Yêu thích cá nhân của tôi. Tương tự như phương pháp RaySasting nhưng thay vì các tia, bạn tận dụng động cơ vật lý và phun ra các viên nhỏ tương tác với cảnh của bạn.

Ưu điểm:

  • Mã cực kỳ dễ dàng. Tạo các quả bóng và áp dụng một xung cho mỗi người. Bạn không có mã để viết mỗi đánh dấu. Chỉ cần có một bộ đếm thời gian đi và tắt / đặt lại các cơ thể sau khi vụ nổ hoàn thành.
  • Vụ nổ bị chặn bởi các đối tượng.
  • Diện tích bề mặt được tính đến.
  • Vụ nổ phản ánh ra khỏi bề mặt.
  • Các đối tượng xa hơn từ vụ nổ phản ứng với nó chậm hơn.
  • Bạn có thể sử dụng các quả bóng làm cơ sở để tạo ra các hạt cho phép các hiệu ứng của bạn phản ánh chính xác tác động của vụ nổ.

Nhược điểm:

  • Thêm độ phức tạp trên mỗi đánh dấu.

5
Câu trả lời rất hay. Tôi đặc biệt thích phương pháp hạt. Có vẻ như nó sẽ làm cho khó khăn hơn để có được một vụ nổ mạnh mẽ mặc dù. Là nó tầm thường để làm cho các hạt có khối lượng cao hơn?
MichaelHouse

1
Nó là tầm thường để ảnh hưởng đến tất cả các khía cạnh vật lý của các hạt, liên quan nhất là mật độ, vận tốc và giảm xóc. Điều chỉnh mật độ lên và thiết lập tốc độ cao sẽ cho phép bạn tạo ra một vụ nổ bạo lực hài hước.
ClassicThunder

Bạn đã làm cho các hạt nổ giảm tốc theo mục đích, hay chỉ là toàn bộ hoạt hình dừng lại. Nó sẽ có ý nghĩa để thêm ma sát liên tục cho các hạt.
này

@elf Box2D cho phép bạn thêm giảm xóc lót vào một đối tượng làm chậm nó một cách tuyệt đối ở một tốc độ nhất định, đây là kỹ thuật được sử dụng trong gif.
ClassicThunder 28/03 '

1
Câu trả lời tuyệt vời :) Tôi sẽ thêm một pro vào phương pháp cuối cùng, trong đó bạn có thể sử dụng các vị trí viên để vẽ một số khói hoặc bụi trông đẹp mắt.
iforce2d

2
  • Chọn tất cả các đối tượng trong bán kính ảnh hưởng của bom.
  • Đối với từng đối tượng
    • Sử dụng vị trí đối tượng và tâm của vụ nổ để tính toán vectơ của xung. Một cái gì đó như normalize(object - center).
    • Sử dụng khoảng cách từ tâm quả bom đến vật thể để tính độ lớn của xung lực. Cái gì đó như(object - center).length
    • Áp dụng một xung cho đối tượng bằng cách sử dụng vectơ và cường độ tìm thấy trong các bước trước.

Đối với việc tính toán cường độ bạn có thể bắt đầu với dự phòng tuyến tính đơn giản, sau đó chuyển sang các công thức khác nếu bạn không thích kết quả.


Các lực lượng là khi bạn muốn tác động đến một đối tượng theo thời gian không phải là tình huống ở đây. Nó sẽ đúng hơn để áp dụng một xung.
ClassicThunder

Xin lỗi, tôi nói lực lượng, nhưng liên kết với xung lực.
MichaelHouse
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.