首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Python中的时间模块时,如何同时运行两个while循环

在使用Python中的时间模块时,如何同时运行两个while循环
EN

Stack Overflow用户
提问于 2015-07-24 07:54:07
回答 1查看 555关注 0票数 2

从本质上讲,我使用的是pygame。我的gameloop有很多事件处理和控制精灵的位置等等。

每隔1秒,雪球精灵就会从屏幕的左边进来,然而,当在游戏函数中输入这个while循环时,只有那个while循环在运行,游戏只是冻结了,因为它只等待1秒并更新子画面,而不是专注于事件处理或任何事情。

即使当使用两个不同的函数时,当运行snowball函数时,程序也不能同时关注这两个函数,并且仍然停留在snowball函数上。

我不想使用任何复杂的东西,只想使用一个简单优雅的解决方案。我看过线程,但它看起来太复杂了,而且我还是个python新手。

EN

回答 1

Stack Overflow用户

发布于 2015-07-24 17:07:27

不要使用time模块。

只需创建一个事件,并告诉pygame每秒将该事件放入事件队列中(使用pygame.time.set_timer函数)。然后你就可以像处理其他事件一样在你的主循环中处理它了。

这里有一个简单的例子。它使用带有pygame.time.set_timer和单个主循环的自定义事件,而不需要time模块:

代码语言:javascript
复制
import pygame
import random
pygame.init()
screen = pygame.display.set_mode((300, 300))
player, dir, size = pygame.Rect(100,100,20,20), (0, 0), 20
MOVEEVENT, APPLEEVENT, trail = pygame.USEREVENT+1, pygame.USEREVENT+2, []
pygame.time.set_timer(MOVEEVENT, 250)
pygame.time.set_timer(APPLEEVENT, 1000)
apples=[]
while True:
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]: dir = 0, -1
    if keys[pygame.K_a]: dir = -1, 0
    if keys[pygame.K_s]: dir = 0, 1
    if keys[pygame.K_d]: dir = 1, 0

    if pygame.event.get(pygame.QUIT): break
    for e in pygame.event.get():
        if e.type == MOVEEVENT: # this event happens every 250 ms
            trail.append(player.inflate((-10, -10)))
            trail = trail[-5:]
            player.move_ip(*[v*size for v in dir])
        if e.type == APPLEEVENT: # this event happens every 1000 ms
            apples.append(pygame.rect.Rect(random.randint(0, 30) * 10, random.randint(0, 30) * 10, 10, 10))

    screen.fill((0,120,0))
    for t in trail:
        pygame.draw.rect(screen, (255,0,0), t)
    for a in apples:
        pygame.draw.rect(screen, (0,255,100), a)

    pygame.draw.rect(screen, (255,0,0), player)
    pygame.display.flip()

这应该会让你对如何解决你的问题有一个想法。不要使用time.sleep,它只会阻塞你的循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31600017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档