为啥我的程序没有延迟 1 秒? [复制]
Posted
技术标签:
【中文标题】为啥我的程序没有延迟 1 秒? [复制]【英文标题】:Why my program doesnt get delayed for 1 second? [duplicate]为什么我的程序没有延迟 1 秒? [复制] 【发布时间】:2021-05-23 18:22:58 【问题描述】:我在 python 中做一个随机游走程序,并使用 Pygame 来制作图形。
程序运行良好,但是我希望在代码末尾的每个for loop
中,它应该延迟程序 1 秒,因此程序在几秒钟内完成,但我可以看到连续随机游走。
所以当我在代码末尾添加time.sleep(1)
时,反而会使程序运行速度变慢,并且不会每秒画一个圆圈:
import pygame
import random
import time
#Initialize the pygame
pygame.init()
#create the screen
screen = pygame.display.set_mode((800,800)) # Width and Height
startX = 400
startY = 400
def returnRandomNumber():
options = [1,-1]
random_sample = random.choice(options)
return random_sample
def returnRandomInt():
random_sample = random.randint(0,255)
return random_sample
running = True
while running:
#update display
pygame.display.update()
for x in range(10000):
pygame.draw.circle(screen, (returnRandomInt(),returnRandomInt(),returnRandomInt()), (startX, startY), 2, 2)
if startX <= 0:
startX += 1
elif startX >= 800:
startX += -1
else:
startX += returnRandomNumber()
if startY <= 0:
startY += 1
elif startY >= 800:
startY += -1
else:
startY += returnRandomNumber()
time.sleep(1)
为什么会发生这种情况?或者我怎样才能让程序画一个圆圈然后延迟 x 秒并继续运行?
【问题讨论】:
【参考方案1】:time.sleep(1)需要和pygame.display.update()交换位置
代码: 导入pygame 随机导入 进口时间
初始化pygame
pygame.init()
创建屏幕
screen = pygame.display.set_mode((800, 800)) # 宽度和高度
开始X = 400 开始Y = 400
def returnRandomNumber(): 选项 = [1, -1]
random_sample = random.choice(options)
return random_sample
def returnRandomInt(): random_sample = random.randint(0, 255)
return random_sample
运行 = 真 在跑步的时候: # 更新显示 time.sleep(1)
for x in range(10000):
pygame.draw.circle(screen, (returnRandomInt(), returnRandomInt(), returnRandomInt()), (startX, startY), 2, 2)
if startX <= 0:
startX += 1
elif startX >= 800:
startX += -1
else:
startX += returnRandomNumber()
if startY <= 0:
startY += 1
elif startY >= 800:
startY += -1
else:
startY += returnRandomNumber()
pygame.display.update()
【讨论】:
抱歉,您的答案不适用于每个系统,因为您不处理内部循环中的事件。 您好,请问正确答案是什么?【参考方案2】:尝试在你的 for 循环中插入更新和睡眠,这样你的显示会在每次迭代后更新:
while running:
#update display
pygame.display.update()
for x in range(10000):
pygame.draw.circle(screen, (returnRandomInt(),returnRandomInt(),returnRandomInt()), (startX, startY), 2, 2)
if startX <= 0:
startX += 1
elif startX >= 800:
startX += -1
else:
startX += returnRandomNumber()
if startY <= 0:
startY += 1
elif startY >= 800:
startY += -1
else:
startY += returnRandomNumber()
pygame.display.update()
time.sleep(1)
【讨论】:
谢谢!确实有效!但是我注意到几秒钟后程序崩溃了,它也发生过,但我认为这是因为无限的while循环,有什么想法吗? 你画了很多圈 - 每次迭代 10000 个,而且它不会停止。因此,您可能希望专注于这段代码并少画圈 - 可能会在几个之后停止。 我想象过,但是在放置 time.sleep 之前它会在崩溃之前绘制数千个圆圈,但是在放置 time.sleep(1) 之后它会绘制 10 个圆圈然后崩溃。 也许 python 会滞后,但重要的是你画的是无限的圆,所以你正在崩溃脚本。 是的,我不知道这是 python 还是 pygame 问题,感谢您的输入,它有效。然而,我尝试了最后一件事,我在程序中添加了一个计数器变量,这样每个 for 循环都会添加 1,并且当它达到与 for 循环中的范围相同的数字时。它将停止程序。所以我注意到程序是如何崩溃并停止绘制的,但几秒钟后它关闭了,在很短的时间内我可以看到其他 x 圈在它关闭之前被绘制。以上是关于为啥我的程序没有延迟 1 秒? [复制]的主要内容,如果未能解决你的问题,请参考以下文章