web-dev-qa-db-ja.com

Pygameでテキストを表示する方法は?

Pygameでテキストを表示することがわかりません。
通常のpython IDLEのようにprintを使用できないことは知っていますが、方法はわかりません。

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)

これはプログラム全体の最初の部分にすぎません。
Pygameウィンドウに入力したテキストを表示できる形式がある場合、それは素晴らしいでしょう。したがって、printを使用する代わりに、他の何かを使用します。しかし、私はそれが他の何かがわからない:/ pygameでプログラムを実行すると、何も表示されない。
プログラムをアイドル状態で実行するのではなく、pygameウィンドウで実行したい。

18
user3146817

テキストを含むサーフェスを作成できます。これについては、この短い例を見てください。

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)

これにより、renderメソッドを呼び出すことができる新しいオブジェクトが作成されます。

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

これにより、テキストがすでに描画された新しいサーフェスが作成されます。最後に、テキスト画面をメイン画面にブリットできます。

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

テキストを変更するたびに、新しいテキストを表示するためにサーフェスを再作成する必要があることに注意してください。

表示するときに、Funkという新しいファイルを作成することがあります。これにはフォント、サイズなどがあります。これはクラスのコードです。

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

次に、更新されたテキストを表示したいときにインポートされたとき、E.Gスコアを更新します:

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

更新されていないのが通常のテキストの場合:

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

最初の例で{0}に気付くかもしれません。これは、.format(whatever)が使用されると更新されるためです。スコアのようなものがあり、ターゲットスコアの場合は、スコアに対して{0}、ターゲットスコアに対して{1}、次に.format(score、targetscore)を実行します。

6
GhostFrag1

_pygame.freetype_ モジュールもあります。これはより現代的で、より多くのフォントで動作し、追加機能を提供します。

フォントがゲーム内にある場合、 pygame.freetype.SysFont() または _pygame.freetype.Font_ でフォントオブジェクトを作成しますディレクトリ。

テキストは、古い_pygame.font.Font.render_と同様に render メソッドを使用して、または を使用してターゲットサーフェスに直接レンダリングできます。 _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()
_
4
skrx