Làm thế nào để thực hiện vụ nổ 2d sẽ gây thiệt hại có tính đến vỏ và khoảng cách?


9

Làm cách nào tôi có thể thực hiện vụ nổ 2D theo cách nó sẽ gây ra ít thiệt hại hơn cho các nhân vật ẩn đằng sau thùng hoặc vỏ bọc khác? Thiệt hại lý tưởng sẽ phụ thuộc vào độ bền của vỏ (ví dụ tường kim loại sẽ bảo vệ tốt hơn sau đó là thùng gỗ). Thiệt hại lý tưởng sẽ giảm theo khoảng cách là tốt.

Tôi sẽ sử dụng một cổng của động cơ vật lý Box2D - Farseer.

Cảm ơn bạn.


1
Wiki ( goo.gl/c1OJx ) khuyên bạn nên sử dụng các hạt có thể thực sự có ý nghĩa vì nó mô phỏng các quá trình vật lý thực tế. Có ai đã xem xét một cách tiếp cận như vậy?
Den

Câu trả lời:


8

Một cách tương đối đơn giản để làm điều này là vẽ một tia từ tâm vụ nổ đến trung tâm của mọi thực thể trong đó DISTANCE(explosion,entity) < exlosion.max_radius(mã giả).

Đối với mỗi thực thể, hãy theo dõi tia này, giảm sát thương cơ bản khi bạn đi. Bất cứ khi nào bạn chạm vào một vật thể trừ đi giá trị che phủ của nó khỏi thiệt hại (về cơ bản là rút ngắn tia).

Khi tia chiếu vào thực thể, bất kỳ thiệt hại nào còn lại là thiệt hại vụ nổ của bạn.

Đối với phương pháp này, bạn có thể muốn một sát thương cơ bản khá cao giảm nhanh theo khoảng cách (tỷ lệ nghịch với bình phương của khoảng cách nên làm tốt).


Một cách tiếp cận khác là vẽ một khu vực chứa đầy đủ thực thể; nhưng không rộng hơn; và tất cả các cách ra .max_radius. Trừ đi khỏi khu vực của khu vực này, khu vực được bao phủ bởi bất kỳ lớp phủ nào giữa vụ nổ và thực thể, nhân với giá trị che phủ của nó. Khu vực còn lại là thiệt hại vụ nổ của bạn.

Một tác dụng phụ của việc này là thực thể càng gần vụ nổ, khu vực đó càng rộng và bạn càng chịu nhiều thiệt hại (khi bạn đếm tất cả các khu vực của khu vực, và chỉ trừ đi diện tích che phủ giữa thực thể và vụ nổ.

Nó cũng có thể hữu ích để coi vỏ bọc là các thực thể; và chỉ đơn giản là trừ đi thiệt hại do các thực thể gần hơn từ những người khác tiến ra, nhưng điều đó có thể trở nên sởn gai ốc.


Chắc chắn tồn tại một cách tiếp cận thậm chí thanh lịch và thông minh hơn, nhưng nó có thể đòi hỏi một số tính toán khá khó chịu. Nó luôn luôn làm.


0

Thiệt hại giảm dần theo khoảng cách nên là một nhiệm vụ đơn giản. Khi bạn tạo vụ nổ, bạn nên biết tọa độ của tâm vụ nổ. Vì bạn đang làm việc trong 2d, nó sẽ chỉ là x và y.

Tất cả những gì bạn cần làm là tính toán khoảng cách của người chơi từ tọa độ tâm của vụ nổ bằng định lý Pythagoras, sau đó sử dụng giá trị đó so với bán kính tối đa để tính tỷ lệ phần trăm của tổng thiệt hại.

Ví dụ: lấy tọa độ (x1, y1) làm điểm chính giữa của khám phá và (x2, y2) làm tọa độ của người chơi. Sau đó chúng ta có thể tính toán thiệt hại được thực hiện như sau:

Distance from centre = sqrt((x2-x1 + (y2-y1)²)
Damage taken = (Distance from centre/Explosion radius) * max damage 

Về phần mọi thứ, tôi quá mệt mỏi khi nghĩ đến câu trả lời, nhưng về cơ bản, bạn đang tìm kiếm các giao lộ dọc theo đường từ trung tâm vụ nổ đến người chơi.

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.