【Pygame】在 Pygame 屏幕中添加文字

font = pygame.font.SysFont("freesansbold.ttf", 30)	# 30:font size
text = font.render("content", True, (0,0,0))	# (0,0,0) color of font
self.window.blit(text,(10,10))	# (10,10) rect left top
### 如何在 Pygame 中正确显示和处理中文文本 为了使 Pygame 能够正常显示中文字符,需要确保几个关键配置被正确设置。 #### 1. 安装合适的体 由于默认情况下 Python 的 `pygame.font` 可能无法识别并渲染亚洲语言中的特殊符,因此推荐使用支持 UTF-8 编码以及 CJK (Chinese, Japanese, Korean) 符集的 TTF 文件。可以从网上下载适合中文字体的 .ttf 文件,并将其加载到项目中[^2]。 ```python import pygame from pathlib import Path def load_chinese_font(font_path="path/to/simhei.ttf", size=32): """Load a Chinese font from the given path.""" return pygame.font.Font(str(Path.cwd() / font_path), size) chinese_font = load_chinese_font() ``` #### 2. 渲染带有中文字符串的 Surface 对象 当创建用于绘制文本的对象时,应传递包含所需编码格式(如 utf-8)的节串给 render 方法: ```python text_surface = chinese_font.render('你好世界', True, (255, 255, 255)) screen.blit(text_surface, dest=(x_position, y_position)) ``` 此处 `(255, 255, 255)` 表示白色颜色值;可以根据实际需求调整坐标位置参数 `dest` 来放置文本于屏幕上的不同地方。 #### 3. 处理用户输入 对于想要收集玩家通过键盘键入的内容的情况,考虑到 Pygame 并不具备内置的支持多国语系文本框的功能,可以考虑利用第三方扩展库 pgu 或者自己编写逻辑来模拟简单的输入区域[^1]。 例如,下面是一个简易版的手动构建单行编辑器的例子: ```python class InputBox: def __init__(self, rect, inactive_color=(0, 0, 0)): self.rect = pygame.Rect(rect) self.color_inactive = inactive_color self.text = '' self.active = False def handle_event(self, event): if event.type == pygame.MOUSEBUTTONDOWN: # 判断鼠标点击是否落在矩形区域内 if self.rect.collidepoint(event.pos): self.active = not self.active else: self.active = False elif event.type == pygame.KEYDOWN and self.active: if event.key == pygame.K_RETURN: print(f'User entered: {self.text}') self.text = '' # 输入完成后清空内容 elif event.key == pygame.K_BACKSPACE: self.text = self.text[:-1] else: try: char = str(event.unicode).encode('utf-8').decode('utf-8') self.text += char except UnicodeDecodeError: pass def update(self): width = max(200, self.rect.width) self.rect.w = width def draw(self, screen): txt_surface = chinese_font.render(self.text, True, self.color_inactive) screen.blit(txt_surface, (self.rect.x+5, self.rect.y+5)) pygame.draw.rect(screen, self.color_inactive, self.rect, 2) input_box = InputBox((100, 100, 140, 32)) while running: for e in pygame.event.get(): input_box.handle_event(e) input_box.update() input_box.draw(screen) pygame.display.flip() ``` 这段代码定义了一个基本的可交互文本框类 `InputBox` ,它允许用户通过按键操作向其中添加或删除符,并且能够响应鼠标的点击激活状态变化。注意这里的 `event.unicode` 属性提供了当前按下的按键对应的 Unicode 符表示形式,在此之前已经设置了支持中文的体对象 `chinese_font` 。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值