Pygame碰撞只在一个对象上起作用

3
我正在使用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个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接