¿Cómo mostrar texto en pygame?

No puedo imaginar mostrar texto en pygame.
Sé que no puedo usar la impresión como en el IDLE de python regular pero no sé cómo

import pygame, sys from pygame.locals import * BLACK = ( 0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = ( 255, 0, 0) pygame.init() size = (700, 500) screen = pygame.display.set_mode(size) DISPLAYSURF = pygame.display.set_mode((400, 300)) pygame.display.set_caption('P.Earth') while 1: # main game loop for event in pygame.event.get(): if event.type == QUIT: pygame.display.update() import time direction = '' print('Welcome to Earth') pygame.draw.rect(screen, RED, [55,500,10,5], 0) time.sleep(1) 

ESTA es solo la parte inicial de todo el progtwig.
Si hay un formato que me permita mostrar el texto que escribo en la ventana de pygame, sería genial. Así que en lugar de usar la impresión usaría otra cosa. Pero no sé qué es esa otra cosa: / Cuando ejecuto mi progtwig en pygame, no muestra nada.
Quiero que el progtwig se ejecute en la ventana de pygame en lugar de ejecutarse en modo inactivo.

Related of "¿Cómo mostrar texto en pygame?"

Puedes crear una superficie con texto en ella. Para esto, mira este breve ejemplo:

 pygame.font.init() # you have to call this at the start, # if you want to use this module. myfont = pygame.font.SysFont('Comic Sans MS', 30) 

Esto crea un nuevo objeto en el que puede llamar al método de render .

 textsurface = myfont.render('Some Text', False, (0, 0, 0)) 

Esto crea una nueva superficie con texto ya dibujado en ella. Al final, puedes simplemente borrar la superficie del texto en tu pantalla principal.

 screen.blit(textsurface,(0,0)) 

Tenga en cuenta que cada vez que cambie el texto, tendrá que volver a crear la superficie para ver el nuevo texto.

Cuando se muestra, a veces hago un nuevo archivo llamado Funk. Esto tendrá la fuente, tamaño, etc. Este es el código para la clase:

 import pygame def text_to_screen(screen, text, x, y, size = 50, color = (200, 000, 000), font_type = 'data/fonts/orecrusherexpand.ttf'): try: text = str(text) font = pygame.font.Font(font_type, size) text = font.render(text, True, color) screen.blit(text, (x, y)) except Exception, e: print 'Font Error, saw it coming' raise e 

Luego, cuando se ha importado cuando quiero mostrar el texto que actualiza las calificaciones de EG, lo hago:

 Funk.text_to_screen(screen, 'Text {0}'.format(score), xpos, ypos) 

Si es solo un texto normal que no se está actualizando:

 Funk.text_to_screen(screen, 'Text', xpos, ypos) 

Puede observar {0} en el primer ejemplo. Esto se debe a que cuando se usa .format (lo que sea) es lo que se actualizará. Si tiene algo como Puntaje, entonces el puntaje objective lo haría {0} para el puntaje luego {1} para el puntaje objective y luego .format (puntaje, puntaje del objective)

También está el módulo pygame.freetype , que es más moderno, funciona con más fonts y ofrece funcionalidad adicional.

Crea un objeto de fuente con pygame.freetype.SysFont() o pygame.freetype.Font si la fuente está dentro de tu directorio de juegos.

Puede renderizar el texto con el método de render manera similar al antiguo pygame.font.Font.render o directamente en la superficie de destino con render_to .

 import pygame import pygame.freetype # Import the freetype module. pygame.init() screen = pygame.display.set_mode((800, 600)) GAME_FONT = pygame.freetype.Font("your_font.ttf", 24) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill((255,255,255)) # You can use `render` and then blit the text surface ... text_surface, rect = GAME_FONT.render("Hello World!", (0, 0, 0)) screen.blit(text_surface, (40, 250)) # or just `render_to` the target surface. GAME_FONT.render_to(screen, (40, 350), "Hello World!", (0, 0, 0)) pygame.display.flip() pygame.quit()