Farseer에서 폭탄을 터뜨려 주변 물체를 밀어 낼 수 있습니까?


14

Farseer에서 폭탄 폭발을 일으키려고합니다. 폭탄 원을 만들었습니다. 그러나 폭탄이 터지면 폭발의 엄청난 힘에 의해 뒤로 밀려 나가는 주위의 물체 (몸체)가 날아 가야합니다. 그 힘을 어떻게 만드는지 잘 모르겠습니다. 어떻게해야합니까?


Farseer에는 폭발을 구현하는 샘플이 포함되어 있습니다. "AdvancedDemo5"(현재 소스)입니다. Classic Thunder의 탁월한 답변의 근접성 방법과 비슷하지만 덜 정교합니다 (AABB 내 고정 크기 임펄스).
Andrew Russell

답변:


28

폭발 iforce2d 페이지를 확인하는 것이 좋습니다 . 성능 대 정확성 트레이드 오프로 폭발을 처리하는 다양한 방법을 살펴 보는 것이 좋습니다. 여기에 요약 할 3 가지 방법이 있습니다. 그래서 이것은 단순히 내가 조사하는 동안 찾은 정보를 요약 한 것이며 그 중 어느 것도 내 일이 아닙니다.

또한 힘이 아닌 여기에 충동을 적용하고 싶습니다. 왜 이것을 읽으십시오 이해 하십시오 .

근접 방법

근접 방법

이것은 Byte56이 그의 대답에서 똑같은 방법입니다. 개념은 간단하다. 폭발 지점이 있고 반대 방향으로 충격을 가해 멀리 떨어진 거리를 기준으로 모든 물체에 영향을줍니다.

장점 :

  • 매우 빠름
  • 코딩하기 쉽습니다.

단점 :

  • 폭발은 움직일 수없는 물체와 정적 물체를 통과합니다.
  • 질량 중심까지의 거리 만 확인하면 폭발의 영향 영역에있는 물체를 건너 뛸 수 있습니다.
  • 표면적은 고려되지 않습니다.
  • 모든 것이 한 번에 영향을받습니다.

레이 캐스트 방법

레이 캐스트 방법

이것은 간단합니다. 폭발의 원점에서 광선을 쫓아 내고 거리에 의해 영향을받는 충격으로 물체에 충돌 할 때 충격을가합니다.

장점 :

  • 발사체 방법보다 성능 집약도가 낮습니다.
  • 물체에 의해 폭발이 차단되었습니다.
  • 표면적이 고려됩니다.

단점 :

  • 모든 것이 한 번에 영향을받습니다.
  • 폭발이 클수록 폭발이 모든 것에 영향을 미치는지 확인하기 위해 더 많은 광선이 필요합니다.
  • 근접 방식보다 성능이 많이 사용됩니다.

입자 방법

입자 방법

내 개인적인 마음에 드는 것. RaySasting 방법과 유사하지만 광선 대신 물리 엔진을 활용하여 장면과 상호 작용하는 작은 펠릿을 뱉어냅니다.

장점 :

  • 매우 쉬운 코드입니다. 공을 생성하고 각각에 충격을가하십시오. 틱당 작성할 코드가 없습니다. 그래도 타이머가 있고 폭발이 완료된 후 바디를 비활성화 / 재설정합니다.
  • 폭발은 물체에 의해 차단됩니다.
  • 표면적이 고려됩니다.
  • 폭발은 표면에서 반사됩니다.
  • 폭발에서 더 멀리 떨어진 물체는 천천히 반응합니다.
  • 볼을 부분 생성의 기초로 사용하여 효과에 폭발 영향을 정확하게 반영 할 수 있습니다.

단점 :

  • 틱당 복잡성을 추가합니다.

5
아주 좋은 대답입니다. 나는 특히 입자 방법을 좋아합니다. 그래도 강력한 폭발 을 얻기가 더 어려워 보입니다 . 입자를 더 높은 질량으로 만드는 것이 사소한가?
MichaelHouse

1
입자의 모든 물리적 측면에 영향을 미치는 것은 사소한 일입니다. 가장 관련성이 높은 밀도, 속도 및 감쇠입니다. 밀도를 높이고 고속을 설정하면 만화 적으로 폭력적인 폭발을 일으킬 수 있습니다.
ClassicThunder

폭발 파티클을 의도적으로 감속하게 만들었습니까, 아니면 전체 애니메이션 정지일뿐입니다. 입자에 일정한 마찰력을 추가하는 것이 합리적입니다.

@self Box2D를 사용하면 객체에 라이너 댐핑을 추가하여 특정 속도로 선형 적으로 속도를 늦출 수 있습니다. 이는 gif에서 사용되는 기술입니다.
ClassicThunder

1
탁월한 답변 :) 마지막 방법에 프로를 하나 더 추가하면 펠릿 위치를 사용하여 멋진 연기 나 먼지를 그릴 수 있습니다.
iforce2d

2
  • 폭탄의 영향 반경 내에있는 모든 물체를 선택하십시오.
  • 각 개체에 대해
    • 물체 위치와 폭발 중심을 사용하여 임펄스 벡터를 계산합니다. 같은 것 normalize(object - center).
    • 임펄스의 크기를 계산하려면 폭탄의 중심에서 물체까지의 거리를 사용하십시오. 같은 것(object - center).length
    • 이전 단계에서 찾은 벡터와 크기를 사용 하여 객체에 임펄스를 적용 합니다.

간단한 선형 감소로 시작할 수있는 크기를 계산 한 다음 결과가 마음에 들지 않으면 다른 수식으로 이동하십시오.


힘은 시간이 지남에 따라 물체에 영향을 미치고 싶을 때를위한 것입니다. 임펄스를 적용하는 것이 더 정확합니다.
ClassicThunder

미안, 나는 힘을 말했지만 충동과 관련이 있었다.
MichaelHouse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.