轉載注明鏈接:https://www.cnblogs.com/liquancai/p/13236196.html
pygame 的字體使用
pygame 可以直接調用系統字體,也可以調用 TTF 字體。為了使用字體,應該首先創建一個 Font 對象(不要忘記初始化 pygame),對於系統自帶的字體應該這樣調用:
font1 = pygame.font.SysFont('arial', 16)
第1個參數是字體名,第2個參數是字號。在正常情況下系統里都有 arial 字體,如果沒有會使用默認字體,默認字體和用戶使用的系統有關。
用戶可以使用 pygame.font.get_fonts()
來獲取當前系統所有可用的字體。
另外還有一種調用方法是使用自己的 TTF 字體:my_font = pygame.font.Font('my_font.ttf', 16)
這個方法的好處是可以把字體文件和游戲一起打包分發,避免玩家計算機上沒有這個字體而無法顯示的問題。一旦有了 Font 對象,就可以使用 render() 方法來設置文本內容,然后通過 blit() 方法寫到屏幕上。
text = font1.render("坦克大戰", True, (0, 0, 0), (255, 255,255))
render() 方法的第1個參數是寫入的文本內容;第2個參數是布爾值,說明是否開啟抗鋸齒;第3個參數是字體本身的顏色;第4個參數是背景的顏色。如果不想有背景色,也就是讓背景透明,可以不加第4個參數。
例如自己定義一個文字處理函數 show_text(), 其中參數 surface_handle 是 surface 句柄,pos 為文字顯示位置,corlor 為文字顏色,font_size 為字體大小,font_bold 為文字是否加粗,font_italic 為文字是否斜體。
def show_text(surface_handle, pos, text, color, font_size = 13, font_bold = False, font_italic = False):
# cur_font = pygame.font.SysFont('宋體', font_size) # 獲取系統字體
cur_font = pygame.font.Font('simafang.ttf', 30) # 獲取字體,並設置大小
cur_font.set_bold(font_bold) # 設置是否加粗
cur_font.set_italic(font_italic) # 設置是否斜體
text_fmt = cur_font.render(text, 1, color) # 設置文本內容
surface_handle.blit(text_fmt, pos) # 繪制文字
在更新窗口內容 pygame.display.update()
之前加入:
text = "坦克大戰"
show_text(screen, (20, 220), text, (255, 0, 0), True)
text = "坦克位置:(%d, %d)" % (tank_rect.left, tank_rect.top)
show_text(screen, (20, 420), text, (0, 255, 255), True)
此時會在屏幕的(20,220)處顯示紅色的“坦克大戰”文字,並且在(20,420)顯示現在坦克所處位置的座標,移動坦克,位置座標文字隨之改變。
完整代碼如下:
import pygame
def show_text(surface_handle, pos, text, color, font_size = 20, font_bold = False, font_italic = False):
cur_font = pygame.font.SysFont("華文宋體", font_size)
cur_font.set_bold(font_bold)
cur_font.set_italic(font_italic)
text_message = cur_font.render(text, 1, color)
surface_handle.blit(text_message, pos)
def tank_play():
pygame.init()
tank_image = pygame.image.load(r"../images/tank.png")
tank_rect = tank_image.get_rect()
back_image = pygame.image.load(r"../images/background2.jpg")
back_rect = back_image.get_rect()
screen = pygame.display.set_mode(back_rect.size)
pygame.display.set_caption("用戶方向鍵控制坦克移動")
tank_rect.center = back_rect.center
offset = 2
fps_clock = pygame.time.Clock()
while True:
fps_clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT]:
tank_rect.x += offset
if keys_pressed[pygame.K_LEFT]:
tank_rect.x -= offset
if keys_pressed[pygame.K_UP]:
tank_rect.y -= offset
if keys_pressed[pygame.K_DOWN]:
tank_rect.y += offset
tank_rect.clamp_ip(back_rect)
screen.blit(back_image, back_rect)
screen.blit(tank_image, tank_rect)
text = "坦克大戰"
show_text(screen, (20, 220), text, (255, 0, 0))
text = f"坦克位置:({tank_rect.x},{tank_rect.y})"
show_text(screen, (20, 250), text, (0, 255, 255))
pygame.display.update()
if __name__ == '__main__':
tank_play()
程序運行結果如下所示:
