Почему мое тело Dynami c тонет через тело Stati c в пимунке? - PullRequest
2 голосов
/ 22 февраля 2020

Я пытаюсь сделать игру «Битва танков», например, Pocket Tanks, используя Pygame и Pymunk в Python. У меня есть тело Dynami c, которое является Танком, и тело Stati c, которое является землей. Все работает хорошо, пока через некоторое время танк не движется влево и погружается в тело наземного стати c и продолжает подпрыгивать вверх и вниз, не «прижимаясь» к земле.

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

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

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

1 Ответ

1 голос
/ 24 февраля 2020

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

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

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

...