2017-02-07 4 views
0

새로운 답변을 드려 죄송합니다. 격자를 만들고 사각형을 클릭 한 다음 1 초에 WHITE로 이동 한 다음 BLACK으로 돌아갑니다. 나를 위해, 논리적 형식이,하지만 난 이해가 안 뭔가가있다 :파이 게임 시간 관리

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.time.delay (1000) 작동하지 않습니다)! 이로 인해 프로그램은 1 초 동안 아무것도하지 않게됩니다. pygame.display.flip()이 호출되지 않으면 화면이 업데이트되지 않으므로 화면을 업데이트하지 않습니다. 프로그램이 1 초도 아무 것도하지 않기 때문에 발생하지 않습니다. 여기 만 지연 프레임 레이트 리미터 (clock.tick)이다

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

주의 : 여기

전체 초에게 올바른 방법을 대기하는 프로그램의 일례이다. delayfps으로 설정되고 fps가 " "인 경우 delay에서 fps으로 설정하면 전체 초 지연과 같습니다.

이 코드는으로 테스트 할 수 없었지만 화면을 클릭하면 1 초 동안 흰색이 깜박입니다. 자신의 코드에 동일한 개념을 적용 할 수 있어야합니다.

추가 설명이 필요하거나 (내 코드가 작동하지 않는 경우) 의견에 저에게 알려 주시면 더 이상 도와 드리겠습니다.

+0

지연 계산 프레임은 부정확 할 수 있습니다. 대신에'delay - = clock.tick (fps)'를하고 이벤트 루프에서 delay를'delay = 1000'으로 설정할 수 있습니다. 'clock.tick'은'clock.tick'에 대한 마지막 호출 이후의 밀리 초 양을 반환합니다. –

+0

좋은 지적. 나는 그저 단순함을 위해 그대로 두겠습니다. 또한, 첫 번째 방법은 지연을 설명하기 때문에 실제로 더 나을 수 있습니다. 프로그램이 뒤쳐지면 다른 것보다 앞서 가지 않습니다. 고맙습니다! – Douglas