首页 > 解决方案 > 如何为循环的特定部分添加延迟

问题描述

我想让蓝色方块每隔几秒钟随机移动一次。我的主要问题是我无法在不关闭整个循环片刻的情况下通过 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()


标签: pythonpygame

解决方案


用于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

推荐阅读