Python 如何将延迟添加到循环的特定部分

Python 如何将延迟添加到循环的特定部分,python,pygame,Python,Pygame,我想让蓝色方块每隔几秒钟随机移动一次。我的主要问题是,如果不关闭整个循环几分钟,我就无法通过睡眠或pygame等待创建延迟。如果我把它放在一个单独的循环中,那么其中一个循环就不会启动。我还能做什么 代码: import pygame,sys,random 从pygame导入* pygame.init() #颜色 蓝色=(0,0255) 白色=(255,255,255) 黑色=(0,0,0) win=pygame.display.set_模式((200400)) x=0 y=350 宽度=50 高

我想让蓝色方块每隔几秒钟随机移动一次。我的主要问题是,如果不关闭整个循环几分钟,我就无法通过睡眠或pygame等待创建延迟。如果我把它放在一个单独的循环中,那么其中一个循环就不会启动。我还能做什么

代码:

import pygame,sys,random
从pygame导入*
pygame.init()
#颜色
蓝色=(0,0255)
白色=(255,255,255)
黑色=(0,0,0)
win=pygame.display.set_模式((200400))
x=0
y=350
宽度=50
高度=50
运行=真
运行时:
如果randx==1:
randx=0
elif randx==2:
randx=50
elif randx==3:
randx=100
elif randx==4:
randx=150
pygame.时间延迟(100)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#玩家#####
keys=pygame.key.get_pressed()
如果键[pygame.K_LEFT]或键[pygame.K_a]:
#左箭头
x-=50
如果键[pygame.K_RIGHT]或键[pygame.K_d]:
#右箭头
x+=50
#循环筛
如果x>=200:
x=0
如果x<0:
x=150
elif event.type==pygame.KEYUP:
如果event.key输入(pygame.K_左,pygame.K_右,pygame.K_上,pygame.K_下):
加速度x=0
加速度y=0
赢。填充((0,0,0))
pygame.draw.rect(赢,(255,0,0),(x,y,宽,高))
pygame.draw.rect(赢,蓝,(randx,0,宽,高))
pygame.display.update()

对于此类问题,您需要利用
多线程的功能。当前程序在单个流中执行。因此,当您调用
sleep
时,整个程序被阻塞<代码>多线程
可以帮助您将程序分解为不同的流:

线程是一个独立的执行流。这意味着您的程序将同时发生两件事


您可以通过阅读了解
多线程

使用
pygame.time.get_ticks()
获取时间,这意味着您可以通过

start_time = pygame.time.get_ticks()

while run:
    ...
    now = pygame.time.get_ticks()
    if now - start_time > 1000 #if if has been 1 second (1000 millaseconds)
       #move squares
       start_time = now #reset timer
start_time = pygame.time.get_ticks()

while run:
    ...
    now = pygame.time.get_ticks()
    if now - start_time > 1000 #if if has been 1 second (1000 millaseconds)
       #move squares
       start_time = now #reset timer