有没有办法更改字体对象的rect-properties?

时间:2019-05-08 12:43:17

标签: python-3.x pygame

问题:大写字母时,我无法在德语文本中显示变音符号('Umlaut points')。

我想显示一个类似'Übung'的单词(英语中的Practice / Exercise。),但是顶部被切断,导致两个点没有显示,而是显示为“ Ubung”。

由于小写字母'ü'确实获得了display属性,因此无法进行编码。尝试显示'Üü'时会显示“Uü”。

我有第17章“用Python发明自己的计算机游戏”中的MWE。

import pygame
from pygame.locals import *

# Set up pygame.
pygame.init()

# Set up the window.
windowSurface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption('Hello world!')

# Set up the colors.
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# Set up the fonts.
basicFont = pygame.font.SysFont(None, 48)

# Set up the text.
text = basicFont.render('Hello Übungswörld!', True, GREEN, BLUE)
textRect = text.get_rect()
textRect.centerx = windowSurface.get_rect().centerx
textRect.centery = windowSurface.get_rect().centery

# Draw the white background onto the surface.
windowSurface.fill(WHITE)

# Get a pixel array of the surface.
pixArray = pygame.PixelArray(windowSurface)
pixArray[480][380] = BLACK
del pixArray

# Draw the text onto the surface.
windowSurface.blit(text, textRect)

# Draw the window onto the screen.
pygame.display.update()

# Run the game loop.
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

OS:MacOS 10.14.4 尝试使用的字体:系统字体(无),“ Palatino”,“ helveticattc”,“ comicsansmsttf”。

奇怪的是,当我在PyCharm中运行此代码时,ComicSans('comicsansmsttf')将呈现Ü,但Helvetica和Palatino不会显示点。

1 个答案:

答案 0 :(得分:2)

问题不是文本的for ()rect自动设置表面尺寸,绝不会切割部分字母。

默认的pygame字体(当您将pygame.font.Font.render()传递给None时使用的字体)可能不支持大写字母的字符分解。

尝试传递其他字体,例如Arial或Times New Roman。

SysFont

我尝试过Arial和Times New Roman。两者都在大写字母上显示二分体,但是您当然可以选择另一种,只要它已安装在系统上即可。

有关更多信息:

  • basicFont = pygame.font.SysFont("Arial", 48) 告诉您哪种是默认的pygame字体。
  • pygame.font.get_default_font()返回可用于pygame的字体列表。