Comment afficher du texte dans pygame?

je ne peux pas comprendre pour afficher du texte dans pygame.

Je sais que je ne peux pas utiliser l'impression comme dans un python normal mais je ne sais pas comment

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)

ce n'est que le début de l'ensemble du programme.

S'il y a un format qui me permettra de montrer le texte que je tape dans la fenêtre pygame ce serait génial. Donc au lieu d'utiliser l'impression, j'utiliserais autre chose. Mais je ne sais pas ce qu'est cette autre chose :/ Quand j'exécute mon programme dans pygame il ne montre pas quoi.

Je veux que le programme tourne dans la fenêtre pygame au lieu de simplement tourner dans idle.

15
demandé sur joaquin 2013-12-30 19:49:29

2 réponses

Vous pouvez créer une surface avec du texte. Pour ce prendre un coup d'oeil à ce petit exemple:

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)

Cela crée un nouvel objet sur lequel vous pouvez appeler le render méthode.

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

cela crée une nouvelle surface avec du texte déjà dessiné dessus. À la fin, vous pouvez simplement blit la surface de texte sur votre écran principal.

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

gardez à l'esprit que chaque fois que le texte change, vous devez recréer la surface à nouveau, pour voir le nouveau texte.

21
répondu Bartlomiej Lewandowski 2017-03-01 14:16:27

lors de l'affichage je crée parfois un nouveau fichier appelé Funk. Ce sera la police, la taille, etc. C'est le code de la classe:

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

puis quand cela a été importé quand je veux afficher des mises à jour de texte taht E. G score je fais:

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

Si c'est juste normal de texte qui n'est pas mis à jour:

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

vous pouvez remarquer {0} sur le premier exemple. C'est parce que quand .le format (quel qu'il soit) utilisé est celui qui sera mis à jour. Si vous avez quelque chose comme Score puis score cible vous feriez {0} pour score puis {1} Pour score cible alors .format (score, targetscore)

5
répondu GhostFrag1 2013-12-30 16:40:53