Je n'arrive pas à afficher le texte en pygame.
Je sais que je ne peux pas utiliser l’impression comme en python IDLE 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)
CECI n'est que la première partie de l'ensemble du programme.
S'il existe un format qui me permettra d'afficher le texte que je tape dans la fenêtre Pygame, ce serait bien. Donc, au lieu d'utiliser l'impression, j'utiliserais autre chose. Mais je ne sais pas ce que c'est que quelque chose d'autre:/Quand j'exécute mon programme en pygame il ne montre rien.
Je veux que le programme s'exécute dans la fenêtre Pygame au lieu de simplement s'exécuter en mode veille.
Vous pouvez créer une surface avec du texte dessus. Pour cela, jetez un œil à ce court 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 la méthode render
.
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 effacer la surface du 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.
Lors de l'affichage, je crée parfois un nouveau fichier appelé Funk. Cela aura la police, la taille, etc. Voici 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
Ensuite, lorsque cela a été importé lorsque je veux afficher du texte, il met à jour le score E.G que je fais:
Funk.text_to_screen(screen, 'Text {0}'.format(score), xpos, ypos)
S'il s'agit uniquement de texte normal qui n'est pas mis à jour:
Funk.text_to_screen(screen, 'Text', xpos, ypos)
Vous remarquerez peut-être {0} dans le premier exemple. En effet, lorsque .format (peu importe) est utilisé, c'est ce qui sera mis à jour. Si vous avez quelque chose comme Score, puis le score cible, vous feriez {0} pour le score puis {1} pour le score cible puis .format (score, score cible)
Il y a aussi le module pygame.freetype
qui est plus moderne, fonctionne avec plus de polices et offre des fonctionnalités supplémentaires.
Créez un objet de police avec pygame.freetype.SysFont()
ou pygame.freetype.Font
si la police se trouve dans votre répertoire de jeu.
Vous pouvez rendre le texte soit avec la méthode render
de manière similaire à l'ancienne pygame.font.Font.render
Soit directement sur la surface cible avec 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()