Python Pygame循环异常延迟

Python Pygame循环异常延迟,python,pygame,Python,Pygame,我似乎真的被困在我的程序的某个点上,希望你能帮助我 我基本上是在尝试创建一个简单的运动图像游戏。图像被随机放置在一系列“向上点”中的一个,然后玩家需要在图像放置到新位置之前点击图像 一切似乎都进展顺利,但pygame.tick或python time.sleep()似乎出现了奇怪的延迟 我只想说我是一个python和pygame的新手,但我一辈子都不明白到底出了什么问题。根据我目前的理解,图像应该以固定的1s间隔移动到新位置 但相反,程序有时似乎会“挂起”或“被延迟”,图像似乎会在原地停留几秒钟

我似乎真的被困在我的程序的某个点上,希望你能帮助我

我基本上是在尝试创建一个简单的运动图像游戏。图像被随机放置在一系列“向上点”中的一个,然后玩家需要在图像放置到新位置之前点击图像

一切似乎都进展顺利,但pygame.tick或python time.sleep()似乎出现了奇怪的延迟

我只想说我是一个python和pygame的新手,但我一辈子都不明白到底出了什么问题。根据我目前的理解,图像应该以固定的1s间隔移动到新位置

但相反,程序有时似乎会“挂起”或“被延迟”,图像似乎会在原地停留几秒钟,然后来回奔波,好像在试图赶上,然后程序似乎会在几秒钟内(正常的1s延迟)正常工作,然后再努力移动或跟上

希望这是有道理的:) 她的代码带有循环,因此您可以看到我认为我的问题出在哪里:

# The values are tuples which hold the top-left x, y co-ordinates at which the  
# rabbit image is to be blitted...

uppoints = {1: (70, 70), 2: (250, 70), 3: (430, 70), 4: (600, 70),
        5: (70, 250), 6: (250, 250), 7: (430, 250), 8: (600, 250),
        9: (70, 430), 10: (250, 430), 11: (430, 430), 12: (600, 430)}


# Get a random location to pop up...
def getpos(ups):
    x = random.randint(1, 2)
    if x == 1:
        up = ups[1]
        return up
    elif x == 2:
        up = ups[2]
        return up

uppos = ()

while gamerunning:
    uppos = getpos(uppoints)

        for event in pygame.event.get():
            if event.type == QUIT:
            gamerunning = False

            if event.type == pygame.MOUSEMOTION:
                mpos = pygame.mouse.get_pos()

            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    if rabbits.rect.collidepoint(event.pos):
                        score += 10

    mainwin.fill((0, 0, 0))
    scoretxt2 = basefont.render(str(score), True, (0, 0, 0))
    mainwin.blit(mainback, (0, 0))
    mainwin.blit(rabbits.image, uppos)
    mainwin.blit(scoretxt, (70, 30))
    mainwin.blit(scoretxt2, (160, 32))
    mainwin.blit(livestxt, (600, 30))
    mainwin.blit(livestxt2, (690, 32))

    pygame.display.flip()

    time.sleep(1)

    # Check which level the user is by score, and increase the speed of the rabbits  as needed...
    fpsclock.tick(60)
如果我使用time.sleep,游戏将以1s的间隔以正确的速度运行。如果我使用time.sleep()并使用.tick(60),图像会疯狂地闪烁,但我确信我仍然可以看到某种延迟

我试着用谷歌搜索一下,发现有几页说pygame的.tick()方法和python sleep()方法都有问题,但没有发现这是不是真的

我真的不知道我做错了什么,所以希望你能帮我:)


非常感谢

你的
time.sleep
fpscall.tick
调用有些矛盾。对
sleep
的调用告诉Python停止整整一秒钟,什么也不做。另一方面,
tick
调用表示您希望以每秒60帧的速度运行

我怀疑您不想使用
睡眠
。当程序处于睡眠状态时,不会处理IO事件,并且程序将显示为挂起。相反,您需要更改代码的其余部分,以便它在每秒更新一次以上时能够正常运行

我想您可能想将调用
getpos
的位置更改为每秒只调用一次。我建议如下:

ms = 0

while gamerunning:
    ms += fpsclock.get_time()
    if ms > 1000: # 1000 ms is one second
        ms -= 1000
        uppos = getpos(uppoints)

    # ...

您好,谢谢您的回复,我理解您所说的2将发生冲突,谢谢您的帮助。在尝试if时,ms。。语句,我认为它的求值为False,因为我得到了无法blit到那个位置(upos)的错误,所以我认为它是一个空元组。如果我添加一个else子句,问题仍然存在…@user3069267:Ah,它可能在第一次通过时被窃听了。在开始循环之前,尝试初始化
uppos
,或者在
1000
处启动
ms
,以便在第一帧运行更新。太棒了!非常感谢您的帮助:)