덮개와 거리를 고려하여 손상을 유발하는 2D 폭발을 구현하는 방법은 무엇입니까?


9

상자 나 다른 덮개 뒤에 숨어있는 캐릭터에게 피해를 줄 이도록 2D 폭발을 어떻게 구현할 수 있습니까? 이상적으로 손상은 덮개의 강도에 달려 있습니다 (예 : 금속 벽은 나무 상자보다 더 잘 보호합니다). 거리에 따라 피해도 감소합니다.

Box2D 물리 엔진의 포트 인 Farseer를 사용하겠습니다.

감사합니다.


1
Wiki ( goo.gl/c1OJx )는 실제 물리적 프로세스를 시뮬레이트하기 때문에 실제로 의미가있는 입자를 사용하도록 권장합니다. 누구든지 그런 접근법을 고려 했습니까?
Den

답변:


8

이 작업을 수행하는 비교적 간단한 방법 중 하나는 폭발 중심에서 모든 엔티티의 중심 DISTANCE(explosion,entity) < exlosion.max_radius(의사 코드) 까지 광선을 그리는 것 입니다.

각 개체마다이 광선을 따라 가면서 기본 피해를 줄입니다. 물체를 뺄 때마다 피해의 커버 값이됩니다 (본질적으로 광선을 줄입니다).

광선이 개체에 닿으면 폭발 피해가 남습니다.

이 방법의 경우, 거리에 따라 빠르게 감소하는 매우 높은 기본 피해를 원할 것입니다 (거리의 제곱에 반비례하면 좋을 것입니다).


다른 접근법은 개체를 완전히 포함하는 섹터를 그리는 것입니다. 그러나 더 넓지 않다. 그리고 밖으로 나가는 길 .max_radius. 이 섹터의 ​​영역에서 폭발과 엔티티 사이의 커버로 커버 된 영역에 커버 값을 곱한 값을 뺍니다. 나머지 영역은 폭발 피해입니다.

이것의 한 가지 좋은 부작용은 엔티티가 폭발에 가까울수록 섹터가 더 넓어지고 더 많은 데미지를 입히는 것입니다 (섹터의 모든 영역을 세고 커버 영역을 빼면 실체와 폭발.

표지를 개체로 취급하는 것도 유용 할 수 있습니다. 더 가까이있는 개체에서 더 멀리 떨어져있는 개체의 피해를 빼기 만하면 심하게 손상 될 수 있습니다.


의심 할 여지없이 훨씬 더 우아하고 영리한 접근법이 존재하지만, 아마도 약간의 불쾌한 미적분학이 필요할 것입니다. 항상 그렇습니다.


0

거리에 따른 피해 감소는 간단한 작업이어야합니다. 폭발을 만들 때 폭발 중심의 좌표를 알아야합니다. 2d에서 작업하고 있기 때문에 x와 y 일뿐입니다.

피타고라스의 정리를 사용하여 폭발 중심 좌표로부터 플레이어의 거리를 계산 한 다음 최대 반경에 대한 거리를 사용하여 전체 피해의 백분율을 계산하면됩니다.

예를 들어, 좌표 (x1, y1)를 설명의 중심점으로, (x2, y2)를 플레이어의 좌표로 사용하십시오. 그런 다음 다음과 같이 피해를 계산할 수 있습니다.

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

방법에 관해서는, 나는 대답을 생각하기에 너무 피곤하지만 기본적으로 폭발의 중심에서 플레이어까지의 선을 따라 교차점을 찾고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.