如何在Pygame中水平或垂直翻转文本?
搞定Pygame文本水平/垂直翻转的方法
嘿,刚接触Pygame的话,文本翻转这个问题其实很容易解决——核心是要记住:Pygame里的文本是先渲染成Surface对象,再对这个Surface做翻转操作,而不是直接处理字符串。我给你一步步拆解解决方案:
关键思路
Pygame没有直接翻转文本的API,但pygame.transform.flip()函数可以对任何Surface进行水平/垂直翻转,所以我们只需要:
- 用字体渲染出文本的Surface
- 对这个Surface调用
flip()实现翻转 - 把翻转后的Surface绘制到屏幕上
完整示例代码(补全你的不完整部分)
我把你的代码补全并添加了翻转逻辑,你可以直接运行试试:
import pygame, sys, datetime, os from pygame.locals import * os.environ['SDL_VIDEO_CENTERED'] = '1' now = datetime.datetime.now() dateoftime = now.strftime("%d-%m-%Y") pygame.init() screen = pygame.display.set_mode((768, 768), pygame.NOFRAME) clock = pygame.time.Clock() White=(255,255,255) Black=(0,0,0) # 补全字体初始化:这里用系统自带的Arial,你可以换成自己想用的字体名称 basicfont = pygame.font.SysFont('Arial', 48, bold=True) # 渲染原始文本Surface(参数:文本,抗锯齿,文字颜色,背景色) original_text = basicfont.render(dateoftime, True, White, Black) # 水平翻转:第二个参数True=水平翻转,第三个False=不垂直翻转 flipped_horizontal = pygame.transform.flip(original_text, True, False) # 垂直翻转:第二个参数False=不水平翻转,第三个True=垂直翻转 flipped_vertical = pygame.transform.flip(original_text, False, True) # 同时水平+垂直翻转(相当于180度旋转) flipped_both = pygame.transform.flip(original_text, True, True) while True: screen.fill(Black) # 绘制不同状态的文本到屏幕不同位置 screen.blit(original_text, (50, 50)) # 原始文本 screen.blit(flipped_horizontal, (50, 150)) # 水平翻转 screen.blit(flipped_vertical, (50, 250)) # 垂直翻转 screen.blit(flipped_both, (50, 350)) # 双向翻转 # 处理退出事件 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN and event.key == K_ESCAPE: pygame.quit() sys.exit() pygame.display.update() clock.tick(60)
几个重要提醒
- 如果你的字体是自定义的本地字体文件(比如
pricedown.ttf),要改用pygame.font.Font()加载:
注意要确保字体文件和你的代码在同一个文件夹里,或者给出完整路径。basicfont = pygame.font.Font('pricedown.ttf', 48) - 如果需要实时更新文本(比如显示当前时间),要把渲染和翻转的代码放到while循环里面,不然只会显示程序启动时的时间。
pygame.transform.flip()不会修改原始Surface,而是返回一个新的翻转后的Surface,所以你可以保留原始文本同时使用多种翻转状态。
内容的提问来源于stack exchange,提问作者A.J
相关产品推荐
相关产品推荐

