事件的pygame时间管理

时间:2017-02-07 03:39:49

标签: python pygame

对不起小说的回答。 我想制作一个网格,当我点击方块时,然后传递给WHITE一秒钟,然后返回BLACK。对我来说,逻辑形式就是这样,但有一点我不明白:( pygame.time.delay(1000)不能工作)

import pygame

# Pygame screen
# Cuadrados
# Añadir tiempo al click

# colores

BLACK    = (   0,   0,   0)
WHITE    = ( 255, 255, 255)
GREEN    = (   0, 255,   0)
RED      = ( 255,   0,   0)

# iniciar pygame

pygame.init()

# caracteristicas de la ventana

size = (260,260)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Pantalla")

# definir array de cuadro (10x10)

width = 20
height = 20
margin = 5

grid = [[0 for x in range(10)] for y in range(10)]


# control de procesos

done = False

clock = pygame.time.Clock()

# loop principal

while not done:

    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            done = True

        # evento de click

        elif event.type == pygame.MOUSEBUTTONDOWN:
            column = pos[0] // (width + margin)
            row = pos[1] // (height + margin)
            # print
            print("Click ", pos, "Coordenadas: ", row, column)
            grid[row][column] = 1
            pygame.time.delay(1000) 
            grid[row][column] = 0


    # lógica de click
    pos = pygame.mouse.get_pos()
    x = pos[0]
    y = pos[1]

    #color de fondo

    screen.fill(WHITE)

    # dibujar cuadro

    for row in range(10):
        for column in range(10):
            if grid[row][column] == 1:
                color = WHITE
            else:
                color = BLACK
            pygame.draw.rect(screen, color, [margin + (margin + width) * column, margin + (margin + height) * row, width, height])



    # escribir todo

    pygame.display.flip()

    clock.tick(60)

# finalizar

pygame.quit()

1 个答案:

答案 0 :(得分:0)

pygame.time.delay(1000)正在工作!这导致程序在一整秒内完全没有做任何事情;这包括不更新屏幕,因为如果没有调用pygame.display.flip(),屏幕将不会更新,这不会发生,因为程序甚至没有做任何一整秒的事情。

以下是一个以正确方式等待一整秒的程序示例:

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([500,500])
clock = pygame.time.Clock()

fps = 60
delay = 0

while 1:
    clock.tick(fps)
    delay -= 1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            delay = fps #a one second delay
    if delay <= 0:
        screen.fill([0,0,0])
    else:
        screen.fill([255,255,255])
    pygame.display.flip()

请注意,此处唯一的延迟是帧速率限制器(clock.tick)。由于delay设置为fps,而fps为“每的帧数”,因此将delay设置为fps等于整秒延迟。< / p>

我无法测试此代码,但是当您点击屏幕时它应该做的是闪烁白色一秒钟。您应该能够在自己的代码中应用相同的概念。

如果您需要进一步澄清(或我的代码无效),请在评论中通知我,我将非常乐意为您提供进一步的帮助!