2017-02-07 10 views
0

Извините за новый ответ. Я хочу сделать сетку, и когда я нажимаю на квадрат, переходим к БЕЛОМ через секунду, а затем возвращаемся к ЧЕРНОМУ. Для меня, логическая форма, но есть то, что я не понимаю: (pygame.time.delay (1000) не работают)pygame управление временем на мероприятии

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() 

ответ

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 равна полной второй задержке.

Я не смог протестировать этот код,, но то, что он должен сделать, является вспышкой белого в течение одной секунды, когда вы нажимаете на экран. Вы должны использовать одну и ту же концепцию в своем собственном коде.

Если вам нужно уточнить (или мой код не работает), пожалуйста, сообщите мне в комментариях, я был бы более чем счастлив помочь вам дальше!

+0

Подсчет кадров для задержки может быть весьма неточным. Вместо этого вы можете сделать 'delay - = clock.tick (fps)' и установить задержку на 'delay = 1000' в цикле событий. 'clock.tick' возвращает количество миллисекунд с момента последнего вызова' clock.tick'. –

+0

Хорошая точка. Я просто оставлю это так, как для простоты. Кроме того, первый способ может быть лучше, потому что он учитывает отставание, поэтому, если программа отстает, она не опередит ничего другого. Спасибо! – Douglas

 Смежные вопросы

  • Нет связанных вопросов^_^