python - 如何为循环的特定部分添加延迟
问题描述
我想让蓝色方块每隔几秒钟随机移动一次。我的主要问题是我无法在不关闭整个循环片刻的情况下通过 sleep 或 pygame 等待来产生延迟。如果我把它放在一个单独的循环中,那么其中一个循环将不会触发。我还可以做些什么?
代码:
import pygame, sys, random
from pygame import *
pygame.init()
# colors
BLUE = (0, 0, 255)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
win = pygame.display.set_mode((200, 400))
x = 0
y = 350
width = 50
height = 50
run = True
while run:
if randx == 1:
randx = 0
elif randx == 2:
randx = 50
elif randx == 3:
randx = 100
elif randx == 4:
randx = 150
pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# player #####
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
# left arrow
x -= 50
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
# right arrow
x += 50
# looping screen
if x >= 200:
x = 0
if x < 0:
x = 150
elif event.type == pygame.KEYUP:
if event.key in (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP, pygame.K_DOWN):
accel_x = 0
accel_y = 0
win.fill((0, 0, 0))
pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
pygame.draw.rect(win, BLUE,(randx, 0, width, height))
pygame.display.update()
解决方案
用于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
推荐阅读
- javascript - 如何在 JavaScript 中从另一个文件加载对象?
- django - Wagtail - 每个用户一个“个人资料”页面
- stata - 如何使用 asdoc 更改列和行
- javascript - 如何在反应谷歌地图中编辑多边形
- python-3.x - sm.current 不切换屏幕
- python - 如何在python中正确停止运行异步进程
- python - 无法使用带有 python:3.9-alpine 图像的 docker 容器通过 webdriver-manager 运行 selenium pytest 测试
- verilog - 设计上的 JK 触发器 verilog 代码错误
- node.js - 初始化 GridFS 流时无法从回调函数中获取 gfs 值
- c# - 如何对带有异步的流进行单元测试