Я начал использовать pygame и хочу создать простую игру. Один из элементов, который мне нужен, - это таймер обратного отсчета. Как я могу установить время обратного отсчета (например, 10 секунд) в PyGame?
Переведено автоматически
Ответ 1
Еще один простой способ - просто использовать систему событий pygame.
counter, text = 10, '10'.rjust(3) pygame.time.set_timer(pygame.USEREVENT, 1000) font = pygame.font.SysFont('Consolas', 30)
run = True while run: for e in pygame.event.get(): if e.type == pygame.USEREVENT: counter -= 1 text = str(counter).rjust(3) if counter > 0else'boom!' if e.type == pygame.QUIT: run = False
Вы загружаете тики один раз перед началом обратного отсчета (который может быть триггером в игре - ключевым событием, чем угодно). Например:
start_ticks=pygame.time.get_ticks() #starter tick while mainloop: # mainloop seconds=(pygame.time.get_ticks()-start_ticks)/1000#calculate how many seconds if seconds>10: # if more than 10 seconds close the game break print (seconds) #print how many seconds
Обратите внимание, в pygame могут быть определены клиентские события. Каждому событию нужен уникальный идентификатор. Идентификаторы пользовательских событий должны быть между pygame.USEREVENT (24) и pygame.NUMEVENTS (32). В данном случае pygame.USEREVENT+1 это идентификатор события для события timer.
Чтобы отключить таймер для события, установите для аргумента milliseconds значение 0.
Получает событие в цикле событий:
running = True while running:
for event in pygame.event.get(): if event.type == pygame.QUIT: running = False
elif event.type == timer_event: # [...]
Событие таймера можно остановить, передав 0 параметру time.
run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False elif event.type == timer_event: counter -= 1 text = font.render(str(counter), True, (0, 128, 0)) if counter == 0: pygame.time.set_timer(timer_event, 0)
pygame.time.Clock.tick возвращает время в миллисекундах с момента последнего clock.tick вызова (дельта-время, dt), поэтому вы можете использовать его для увеличения или уменьшения переменной timer.
import pygame as pg
defmain(): pg.init() screen = pg.display.set_mode((640, 480)) font = pg.font.Font(None, 40) gray = pg.Color('gray19') blue = pg.Color('dodgerblue') # The clock is used to limit the frame rate # and returns the time since last tick. clock = pg.time.Clock() timer = 10# Decrease this to count down. dt = 0# Delta time (time since last tick).
done = False whilenot done: for event in pg.event.get(): if event.type == pg.QUIT: done = True
timer -= dt if timer <= 0: timer = 10# Reset it to 10 or do something else.