Как получить силу, действующую на тело, когда происходит столкновение в Pymunk

Я пытаюсь сделать игру, в которой игрок стреляет по объектам, и когда «пуля» попадает в объекты, они должны исчезнуть. Правильно, это отлично работает, но теперь я пытаюсь сделать так, чтобы объекты исчезали только в том случае, если пуля дает определенную силу/импульс. Кто-нибудь знает, как это сделать?

В настоящее время, чтобы получить столкновения, которые я делаю:

collision_handler = space.add_collision_handler(1, 2)
collision_handler.begin = collision_happened

person jifeh56745    schedule 10.03.2020    source источник


Ответы (2)


Вы должны использовать обратный вызов post_solve. В этом обратном вызове вы можете проверить, больше ли arbiter.total_impulse некоторого значения. В зависимости от вашей логики вы также можете проверить, что arbiter.is_first_contact является истинным.

person viblo    schedule 11.03.2020

Это из примеров на основе C, но очень актуально: https://github.com/slembcke/Chipmunk2D/blob/master/demo/ContactGraph.c

Пара замечаний:

  • Импульс выражается в единицах импульса, длина/дельта_время дает вам силу.
  • Для пуль вам, вероятно, нужна кинетическая энергия. (.total_ke в pymunk)
person slembcke    schedule 11.03.2020