Обработка коллизий в Pygame - PullRequest
0 голосов
/ 13 ноября 2018

Я сделал 2D платформерную игру с pygame.Я изо всех сил пытаюсь выяснить, как определить направление движения объекта.

Например: скажем, игрок идет сверху, так как его скорость у больше нуля, тогда проблема в том, что его гравитациядействуя на него постоянно;это означает, что если он идет с левой стороны, его скорость у больше нуля (так что это, если оператор сработает, даже если я хочу, чтобы оператор с левой стороны, если сработал).

Источниккод для этого следующий: `

if self.hits:
    for platform in self.hits:

        if self.player.vel.y > 0:
            self.player.rect.y = platform.rect.top
            self.player.vel.y = 0

        if self.player.vel.y < 0:
            self.player.rect.top = platform.rect.bottom
            self.player.vel.y = 0

        if self.player.vel.x > 0:
            self.player.rect.right = platform.rect.left

        if self.player.vel.y < 0:
            self.player.rect.left = platform.rect.right

Вот почему я создал некоторые ограничения для распознавания каждого из четырех направлений:`

if self.hits:
   for platform in self.hits:

       if self.player.rect.bottom >= (platform.rect.top) and self.player.rect.bottom <= (platform.rect.top + 16)\
       and (self.player.rect.centerx + 13) >= platform.rect.left and (self.player.rect.centerx - 13) <= platform.rect.right:
               self.player.pos_bottom.y = platform.rect.top
               self.player.vel.y = 0

       elif self.player.rect.top <= (platform.rect.bottom) and self.player.rect.top >= (platform.rect.bottom - 16)\
       and (self.player.rect.centerx + 13) >= platform.rect.left and (self.player.rect.centerx - 13) <= platform.rect.right:
               self.player.rect.top = platform.rect.bottom
               self.player.vel.y = 0

       elif self.player.rect.right >= (platform.rect.left) and self.player.rect.right <= (platform.rect.right + 10) and self.player.vel.x >= 0\
       and self.player.rect.centery >= platform.rect.top and self.player.rect.centery <= platform.rect.bottom:
           self.player.rect.right = platform.rect.left
           self.player.vel.x = 0

       elif self.player.rect.left <= (platform.rect.right) and self.player.rect.left >= (platform.rect.right - 10) and self.player.vel.x <= 0\
       and self.player.rect.centery >= platform.rect.top and self.player.rect.centery <= platform.rect.bottom:
           self.player.rect.left = platform.rect.right
           self.player.vel.x = 0`

Этот код ограничивает зону, в которойНаправление игроков становится узнаваемым, но в нем есть много ошибок, а также оно ужасно.

...