Използвам стандартен Box2D ContactListener
, за да слушам събития на сблъсък. Това, което искам, е да изчисля силата на удара от сблъсъка между телата.
Прочетох много различни описания на това как хората го изчисляват. Някои използват обратното извикване preSolve
, други използват postSolve
. Някои използват Manifold
, други ContactImpulse
. Някои вземат само нормален импулс+тангентен импулс на първата точка, други вземат сумата от всички точки, а трети, отново, вземат максимума. Някои хора напълно пренебрегват тангентните импулси...
Не мога да разбера този проблем. Понякога получавам само импулси в postSolve
, а импулсите в preSolve
са общо 0. Понякога е обратното. Понякога получавам абсурдно високи стойности (да речем 1E15 до 1E30), а понякога те са абсурдно ниски (да речем -1E15 до -1E30). Дори имах случай, че един от импулсите беше NaN
(Не е число).
Има ли някой, който може да ми обясни как да реша този проблем и може би да обясни как да тълкувам тези импулси? Или може би да ме насочите към всякакъв вид игра с отворен код, която използва Box2D и също трябва да изчисли въздействието за всякакъв вид система за щети?