Столкновения Pygame работают только на одном объекте - PullRequest
3 голосов
/ 27 мая 2019

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

Это мой последний курс по информатике.Я пытался использовать групповое столкновение, но это работает только со спрайтами, и если бы я хотел пойти по этому пути, мне пришлось бы переписать довольно много моего кода.

# in main loop
for i in platforms: 
    if i.rect.colliderect(c) and c.isjump == False: 
        # If player is on platform and not jumping
        c.falling = False 
        c.isjump = False
        c.jumpcount = 10
        c.onplat = True
    else:
        c.falling = True
        c.onplat = False

Все здесь работает (ине выдает никаких ошибок), за исключением случаев, когда я проверяю это, только одна платформа останавливает игрока от падения, в то время как другая (и) просто проходит через игрока.Я могу показать больше кода при необходимости.

1 Ответ

6 голосов
/ 27 мая 2019

Если вы определили платформу, которая «останавливает» игрока, то вы должны break цикл:

for i in platforms: 
    if i.rect.colliderect(c) and c.isjump == False: 
       c.falling = False 
       c.isjump = False
       c.jumpcount = 10
       c.onplat = True

       break # <----- break the loop

    else:
       c.falling = True
       c.onplat = False

, иначе результат следующей платформы перезапишет результат ипоследняя платформа в списке устанавливает результат в любом случае.

Обратите внимание, что вы можете упростить код, найдя any платформа:

if c.isjump == False and any([i for i in platforms if i.rect.colliderect(c)]):
   c.falling = False 
   c.jumpcount = 10
   c.onplat = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...