상자 나 다른 덮개 뒤에 숨어있는 캐릭터에게 피해를 줄 이도록 2D 폭발을 어떻게 구현할 수 있습니까? 이상적으로 손상은 덮개의 강도에 달려 있습니다 (예 : 금속 벽은 나무 상자보다 더 잘 보호합니다). 거리에 따라 피해도 감소합니다.
Box2D 물리 엔진의 포트 인 Farseer를 사용하겠습니다.
감사합니다.
상자 나 다른 덮개 뒤에 숨어있는 캐릭터에게 피해를 줄 이도록 2D 폭발을 어떻게 구현할 수 있습니까? 이상적으로 손상은 덮개의 강도에 달려 있습니다 (예 : 금속 벽은 나무 상자보다 더 잘 보호합니다). 거리에 따라 피해도 감소합니다.
Box2D 물리 엔진의 포트 인 Farseer를 사용하겠습니다.
감사합니다.
답변:
이 작업을 수행하는 비교적 간단한 방법 중 하나는 폭발 중심에서 모든 엔티티의 중심 DISTANCE(explosion,entity) < exlosion.max_radius
(의사 코드) 까지 광선을 그리는 것 입니다.
각 개체마다이 광선을 따라 가면서 기본 피해를 줄입니다. 물체를 뺄 때마다 피해의 커버 값이됩니다 (본질적으로 광선을 줄입니다).
광선이 개체에 닿으면 폭발 피해가 남습니다.
이 방법의 경우, 거리에 따라 빠르게 감소하는 매우 높은 기본 피해를 원할 것입니다 (거리의 제곱에 반비례하면 좋을 것입니다).
다른 접근법은 개체를 완전히 포함하는 섹터를 그리는 것입니다. 그러나 더 넓지 않다. 그리고 밖으로 나가는 길 .max_radius
. 이 섹터의 영역에서 폭발과 엔티티 사이의 커버로 커버 된 영역에 커버 값을 곱한 값을 뺍니다. 나머지 영역은 폭발 피해입니다.
이것의 한 가지 좋은 부작용은 엔티티가 폭발에 가까울수록 섹터가 더 넓어지고 더 많은 데미지를 입히는 것입니다 (섹터의 모든 영역을 세고 커버 영역을 빼면 실체와 폭발.
표지를 개체로 취급하는 것도 유용 할 수 있습니다. 더 가까이있는 개체에서 더 멀리 떨어져있는 개체의 피해를 빼기 만하면 심하게 손상 될 수 있습니다.
의심 할 여지없이 훨씬 더 우아하고 영리한 접근법이 존재하지만, 아마도 약간의 불쾌한 미적분학이 필요할 것입니다. 항상 그렇습니다.
거리에 따른 피해 감소는 간단한 작업이어야합니다. 폭발을 만들 때 폭발 중심의 좌표를 알아야합니다. 2d에서 작업하고 있기 때문에 x와 y 일뿐입니다.
피타고라스의 정리를 사용하여 폭발 중심 좌표로부터 플레이어의 거리를 계산 한 다음 최대 반경에 대한 거리를 사용하여 전체 피해의 백분율을 계산하면됩니다.
예를 들어, 좌표 (x1, y1)를 설명의 중심점으로, (x2, y2)를 플레이어의 좌표로 사용하십시오. 그런 다음 다음과 같이 피해를 계산할 수 있습니다.
Distance from centre = sqrt((x2-x1)² + (y2-y1)²)
Damage taken = (Distance from centre/Explosion radius) * max damage
방법에 관해서는, 나는 대답을 생각하기에 너무 피곤하지만 기본적으로 폭발의 중심에서 플레이어까지의 선을 따라 교차점을 찾고 있습니다.