Почему мое динамическое тело опускается сквозь статическое тело в пимунке?

Я пытаюсь сделать игру Tank Battle, такую ​​как Pocket Tanks, используя Pygame и Pymunk на Python. У меня есть динамическое тело, которое является резервуаром, и статическое тело, которое является землей. Все работает нормально, пока через некоторое время Танк не переместится влево сам по себе и не погрузится в статическое тело земли и продолжит подпрыгивать вверх и вниз, не пробираясь сквозь землю.

Весь мой код можно найти здесь: https://github.com/MysteryCoder456/PyTanks.io

Вот видео о том, что происходит (Имейте в виду, что нажимайте клавишу "D" только один раз после того, как танк приземлится): https://streamable.com/2fuzz

Изменить: я использую Python 3.7.6, Pygame 2.0.0dev6, MacOS 10.15.3. Я не знаю, какая версия Pymunk.


person MysteryCoder456    schedule 22.02.2020    source источник


Ответы (1)


Одна вещь, которая может вызвать такое поведение, - это не помещать центр тяжести (CoG) в фактический центр (или близко к нему). В вашем коде способ построения полигонов земли и резервуара означает, что их центр тяжести будет в первом углу фигуры в точке (0,0). Вместо этого попробуйте построить полигональные вершины как:

 self.vertices = (
        (-width/2, -height/2),
        (width/2, - height/2),
        (width/2, height/2),
        (-width/2, height/2)
    )

Это похоже на проблему здесь Pymunk / Chipmunk2d - динамические тела столкновение со статическими телами, генерирующими импульсы столкновения, я поясню это в документах pymunk, кажется простой ошибкой.

person viblo    schedule 24.02.2020