2015-08-24 120 views
2

如何在PyGame中閃爍文字?下面是一段文字,我想閃爍一次每秒左右:PyGame中的閃爍文字

text = pygame.font.Font("c:/windows/fonts/visitor1.ttf", 50) 

textsurf, textrect = text_objects("Press Any Key To Start", text) 

textrect.center = ((res_w/2), (res_h/2)) 

screen.blit(textsurf, textrect) 

回答

2

爲了有它閃爍,你必須畫出它的第二個然後刪除它的第二個重複此,再次。爲了定時閃爍,可以使用自定義定時器事件。

#!/usr/bin/env python 
# coding: utf8 
from __future__ import absolute_import, division, print_function 
from itertools import cycle 
import pygame 

VISITOR_TTF_FILENAME = '/usr/share/fonts/truetype/aenigma/visitor1.ttf' 
BLINK_EVENT = pygame.USEREVENT + 0 


def main(): 
    pygame.init() 
    try: 
     screen = pygame.display.set_mode((800, 600)) 
     screen_rect = screen.get_rect() 

     clock = pygame.time.Clock() 

     font = pygame.font.Font(VISITOR_TTF_FILENAME, 50) 
     on_text_surface = font.render(
      'Press Any Key To Start', True, pygame.Color('green3') 
     ) 
     blink_rect = on_text_surface.get_rect() 
     blink_rect.center = screen_rect.center 
     off_text_surface = pygame.Surface(blink_rect.size) 
     blink_surfaces = cycle([on_text_surface, off_text_surface]) 
     blink_surface = next(blink_surfaces) 
     pygame.time.set_timer(BLINK_EVENT, 1000) 

     while True: 
      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        return 
       if event.type == BLINK_EVENT: 
        blink_surface = next(blink_surfaces) 

      screen.blit(blink_surface, blink_rect) 
      pygame.display.update() 
      clock.tick(60) 
    finally: 
     pygame.quit() 


if __name__ == '__main__': 
    main() 

而不是在關閉階段完全黑色,人們也可以用更深的顏色blit文本。

將源自Pygame的Sprite的閃爍文本封裝起來,可能有助於在初始化和主循環中保持清晰的代碼。