Pygame - 加载字母并显示图像文本

问题描述 投票:0回答:1

我正在关注 Tim 的 Tech 指南,了解如何创建平台游戏 link

我基于他的 load_sprites 函数创建了一个从精灵图像加载字母的函数:

def load_letters_from_sprite_sheets(w, h):
    path = join('Assets', 'Menu', 'Text',)
    images = [f for f in listdir(path) if isfile(join(path, f))]

    all_images = {}

    for image in images:
        text_sheet = pygame.image.load(join(path, image)).convert_alpha()
        letters = []

        for i in range(text_sheet.get_width() // w):
            for j in range(text_sheet.get_height() // h):
                surface = pygame.Surface((w, h), pygame.SRCALPHA, 32)
                rect = pygame.Rect(i * w, j * h, w, h)
                surface.blit(text_sheet, (0, 0), rect)
                letters.append(pygame.transform.scale2x(surface))

        all_images[image.replace('.png', '')] = letters

    return all_images

加载包含字母的图像(在 Game().init 上调用)

self.letter_sheets = load_letters_from_sprite_sheets( 8, 10)

带有字母的图像 所以我创建了一个小函数来将字母加载到列表中:

def display_text(window, all_images, x, y, text: str, color = 'white', size = 1.0):
    if color.lower() == 'white':
        src_image = all_images['Text (White) (8x10)']
    else:
        src_image = all_images['Text (Black) (8x10)']
    
    for i in range(len(src_image)):
        #print(f'i: {i}, img: {src_image[i]}')
        window.blit(src_image[i], (x + i * src_image[i].get_width() , y))

但是,当我尝试显示文本时,它没有显示(在游戏主循环中调用):

display_text(self.window, self.letter_sheets, 100, 100, 'abcdefghijklmnopqrstuvwxyz', 'white')

我在这里缺少什么?感谢您的帮助:)

我尝试显示从图像加载的所有字母(暂时不考虑用户输入),但它没有显示在屏幕上。

python pygame sprite
1个回答
0
投票

我在这里复制了你的代码

它显示一些内容,您可以提供必要的导入以使其更清晰。所以我假设您在其他地方有配置错误。

创建一个最小的错误示例总是一个好主意。使用尽可能少的代码来重现手头的问题。

另一个问题是您的映射已关闭。您正在加载大量需要更改映射的空矩形。另外,您根本不使用文本输入,只是迭代所有字母。也许这是为了调试而故意的。 更好的显示文字功能:

def display_text(window, letter_images, x, y, text: str, color='white', size=1.0): char_map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,;:?!()+-" for char in text: if char in char_map: index = char_map.index(char) letter_image = letter_images[index] scaled_image = pygame.transform.scale(letter_image, (int(letter_image.get_width() * size), int(letter_image.get_height() * size))) window.blit(scaled_image, (x, y)) x += scaled_image.get_width()
    
© www.soinside.com 2019 - 2024. All rights reserved.