Pygame碰撞仅作用于一个对象

时间:2019-05-27 16:58:12

标签: python pygame collision

我正在pygame上编写平台游戏,但遇到一个问题,即仅检测到我的平台冲突之一。

这是我在计算机科学课程中的期末考试。我曾尝试使用组冲突,但仅适用于sprite,如果我想走那条路线,则必须重写大量代码。

# 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 个答案:

答案 0 :(得分:6)

如果您确定了一个“停止”播放器的平台,则必须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