我正在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
这里的所有东西都可以工作(并且不会产生任何错误),除非我进行测试,否则只有一个平台阻止播放器掉落,而其他平台则只是逐步通过播放器。如果需要,我可以显示更多代码。
答案 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