Я кодирую платформер на 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
Здесь все работает (и не выдает никаких ошибок), за исключением того, что когда я тестирую, только одна платформа останавливает игрока от падения, а другая (и) просто проходит через игрока. Я могу показать больше кода, если это необходимо.
Если вы определили платформу, которая «останавливает» игрока, вам нужно 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