详解Pygame 在窗口中显示文本

  • Post category:Python

Pygame 是一个基于 Python 的游戏开发库,可以用于开发 2D 游戏。在 Pygame 中,显示文本是非常基础和常见的操作。以下是详细的 Pygame 在窗口中显示文本的使用方法:

安装 Pygame

在使用 Pygame 之前,需要先安装 Pygame 库。可以使用以下命令在终端中安装 Pygame:

pip install pygame

导入 Pygame 库

在使用 Pygame 显示文本之前,需要先导入 Pygame 库:

import pygame

创建窗口

在显示文本之前,需要先创建 Pygame 窗口。可以使用以下代码创建窗口:

# 初始化 Pygame
pygame.init()

# 创建窗口
win = pygame.display.set_mode((500, 500))

# 游戏主循环
while True:
    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 更新窗口
    pygame.display.update()

注意,在创建 Pygame 窗口后,需要在主循环中不断更新窗口,否则窗口将一闪而过。

创建文本对象

在 Pygame 中,可以使用 pygame.font.Font 类创建一个新的文本对象。可以设置字体、字号和粗细度等属性:

# 创建文本对象
font = pygame.font.Font(None, 24)

其中,None 表示使用默认字体,24 表示字号。

渲染文字

创建了文本对象后,可以使用 render 方法将文本渲染到 Surface 对象上:

# 渲染文字
text = font.render('Hello, World!', True, (255, 255, 255))

render 方法的第一个参数是要渲染的文本,第二个参数表示是否启用抗锯齿,第三个参数表示文本的颜色。

显示文本

渲染了文本后,需要将文本显示到 Pygame 窗口中。可以使用 blit 方法将 Surface 对象绘制到窗口上:

# 显示文本
win.blit(text, (10, 10))

blit 方法的第一个参数是要绘制的 Surface 对象,第二个参数是绘制的位置。

完整代码示例:

import pygame
import sys

# 初始化 Pygame
pygame.init()

# 创建窗口
win = pygame.display.set_mode((500, 500))

# 创建文本对象
font = pygame.font.Font(None, 24)

# 游戏主循环
while True:
    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 渲染文字
    text = font.render('Hello, World!', True, (255, 255, 255))

    # 显示文本
    win.blit(text, (10, 10))

    # 更新窗口
    pygame.display.update()

另一个例子是给用户输入的文本增加一个光标,光标的闪烁表明输入焦点在哪里。完整代码示例:

import pygame
import sys

# 初始化 Pygame
pygame.init()

# 创建窗口
win = pygame.display.set_mode((500, 500))

# 创建文本对象
font = pygame.font.Font(None, 24)

# 输入的文本
input_text = ''
# 光标位置和计时器
cursor_pos = 0
cursor_timer = 0

# 渲染光标
def render_cursor():
    global cursor_pos, cursor_timer
    if cursor_pos <= len(input_text):
        cursor_timer += 1
        if cursor_timer > 30:
            cursor_timer = 0
        if cursor_timer < 15:
            cursor_width = 2
        else:
            cursor_width = 0
        cursor_pos_text = input_text[:cursor_pos]
        cursor_text = font.render(cursor_pos_text, True, (255, 255, 255))
        cursor_rect = cursor_text.get_rect()
        cursor_x = cursor_rect.width
        pygame.draw.line(win, (255, 255, 255), (cursor_x, 30), (cursor_x, 50), cursor_width)

# 渲染输入的文本
def render_text():
    global input_text
    text = font.render(input_text, True, (255, 255, 255))
    win.blit(text, (10, 30))

# 游戏主循环
while True:
    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.unicode.isalnum() or event.unicode == ' ':
                input_text = input_text[:cursor_pos] + event.unicode + input_text[cursor_pos:]
                cursor_pos += 1
            elif event.key == pygame.K_LEFT and cursor_pos > 0:
                cursor_pos -= 1
            elif event.key == pygame.K_RIGHT and cursor_pos < len(input_text):
                cursor_pos += 1
            elif event.key == pygame.K_BACKSPACE and cursor_pos > 0:
                input_text = input_text[:cursor_pos-1] + input_text[cursor_pos:]
                cursor_pos -= 1
            elif event.key == pygame.K_DELETE and cursor_pos < len(input_text):
                input_text = input_text[:cursor_pos] + input_text[cursor_pos+1:]

    # 渲染输入的文本和光标
    render_text()
    render_cursor()

    # 更新窗口
    pygame.display.update()

以上就是 Pygame 在窗口中显示文本的完整攻略,如果有任何问题和疑问,欢迎留言回复。