文本是任何一款游戲中不可或缺的重要要素之一,Pygame 通過
pygame.font
模塊來創(chuàng)建一個字體對象,從而實現(xiàn)繪制文本的目的。該模塊的常用方法如下所示:
方法 | 說明 |
---|---|
pygame.font.init() | 初始化字體模塊 |
pygame.font.quit() | 取消初始化字體模塊 |
pygame.font.get_init() | 檢查字體模塊是否被初始化,返回一個布爾值。 |
pygame.font.get_default_font() | 獲得默認字體的文件名。返回系統(tǒng)中字體的文件名 |
pygame.font.get_fonts() | 獲取所有可使用的字體,返回值是所有可用的字體列表 |
pygame.font.match_font() | 從系統(tǒng)的字體庫中匹配字體文件,返回值是完整的字體文件路徑 |
pygame.font.SysFont() | 從系統(tǒng)的字體庫中創(chuàng)建一個 Font 對象 |
pygame.font.Font() | 從一個字體文件創(chuàng)建一個 Font 對象 |
Font 模塊提供了兩種創(chuàng)建字體(Font)對象的方法,分別是:
下面對這兩種方法分分別進行介紹:
直接從系統(tǒng)中加載字體使用如下方法:
pygame.font.SysFont(name, size, bold=False, italic=False)
name:列表參數(shù)值,表示要從系統(tǒng)中加載的字體名稱,它會按照列表中的元素順序依次搜索,如果系統(tǒng)中沒有列表中的字體,將使用 Pygame 默認的字體。
使用示例如下:
print("獲取系統(tǒng)中所有可用字體",pygame.font.get_fonts()) my_font = pygame.font.SysFont(['方正粗黑宋簡體','microsoftsansserif'],50)
上述方法將優(yōu)先使用“方正粗黑宋簡體”。
注意,如果要顯示中文,那么一定要使用中文字體文件,比如“方正粗黑宋簡體”,否則會出現(xiàn)文字亂碼的現(xiàn)象(編程幫三個字無法顯示)。如下所示:
圖1:顯示中文亂碼
當我們想要在游戲中引入比較炫酷的字體,而系統(tǒng)中又不存在時,我們可以使用另外一種方法,從外部加載字體文件來繪制文本。其語法格式如下:
my_font = pygame.font.Font(filename, size)
參數(shù)說明如下:
使用示例如下:
f = pygame.font.Font('C:/Users/Administrator/Desktop/willhar_.ttf',50)
從桌面加載了一個字體文件來創(chuàng)建字體對象,并設(shè)置字體大小為 50。注意,上述字體文件是在網(wǎng)上下載的,您也可以任意下載(
點擊網(wǎng)址前往),或者使用系統(tǒng)庫中的字體文件。
Pygame 為處理字體對象提供了一些常用方法,如下所示:
方法 | 說明 |
---|---|
pygame.font.Font.render() | 該函數(shù)創(chuàng)建一個渲染了文本的 Surface 對象 |
pygame.font.Font.size() | 該函數(shù)返回渲染文本所需的尺寸大小,返回值是一個一元組 (width,height) |
pygame.font.Font.set_underline() | 是否為文本內(nèi)容繪制下劃線 |
pygame.font.Font.get_underline() | 檢查文本是否繪制了下劃線 |
pygame.font.Font.set_bold() | 啟動粗體字渲染 |
pygame.font.Font.get_bold() | 檢查文本是否使用粗體渲染 |
pygame.font.Font.set_italic() | 啟動斜體字渲染 |
pygame.font.Font.metrics() | 獲取字符串中每一個字符的詳細參數(shù) |
pygame.font.Font.get_italic() | 檢查文本是否使用斜體渲染 |
pygame.font.Font.get_linesize() | 獲取字體文本的行高 |
pygame.font.Font.get_height() | 獲取字體的高度 |
pygame.font.Font.get_ascent() | 獲取字體頂端到基準線的距離 |
pygame.font.Font.get_descent() | 獲取字體底端到基準線的距離 |
使用上述方法,我們可以非常方便地對字體進行渲染,或者獲取字體的相關(guān)信息,比如字體的高度、是否是粗體、斜體等信息。
上述方法中使用最多要數(shù)第一個方法,它是繪制文本內(nèi)容的關(guān)鍵方法,其語法格式如下:
render(text, antialias, color, background=None)
參數(shù)說明如下所示:
下面看一組簡單的示例:
- import sys
- import pygame
- # 初始化
- pygame.init()
- screen = pygame.display.set_mode((600,400))
- #填充主窗口的背景顏色
- screen.fill((20,90,50))
- #設(shè)置窗口標題
- pygame.display.set_caption('c語言中文網(wǎng)')
- # 字體文件路徑 C:/Windows/Fonts/simhei.ttf
- f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)
- # render(text, antialias, color, background=None) -> Surface
- text = f.render("網(wǎng)址:c.biancheng.net",True,(255,0,0),(255,255,255))
- #獲得顯示對象的 rect區(qū)域大小
- textRect =text.get_rect()
- #設(shè)置顯示對象居中
- textRect.center = (300,200)
- screen.blit(text,textRect)
- while True:
- # 循環(huán)獲取事件,監(jiān)聽事件
- for event in pygame.event.get():
- # 判斷用戶是否點了關(guān)閉按鈕
- if event.type == pygame.QUIT:
- #卸載所有pygame模塊
- pygame.quit()
- #終止程序
- sys.exit()
- pygame.display.flip() #更新屏幕內(nèi)容
程序運行結(jié)果如下所示:
圖2:顯示文本內(nèi)容
除了使用上述方法之外,Pygame 為了增強字體模塊的功能,在新的版本中又加入了另外一個字體模塊,它就是 Freetype 模塊。該模塊屬于 Pygame 的高級模塊, 它能夠完全可以取代 Font 模塊,并且在 Font 模塊的基礎(chǔ)上又添加了許多新功能,比如調(diào)整字符間距離,字體垂直模式以及逆時針旋轉(zhuǎn)文本等(詳情可閱讀
官方文檔)。
如果想 Freetype 模塊,必須使用以下方式導(dǎo)包:
import pygame.freetype
下面使用 Freetype 模塊來繪制文本內(nèi)容,代碼如下:
- import sys,pygame
- import pygame.freetype
- pygame.init()
- # 設(shè)置位置變量
- pos=[180,50]
- # 設(shè)置顏色變量
- GOLD=255,251,0
- BLACK=0,0,0
- screen=pygame.display.set_mode((600,400))
- pygame.display.set_caption("c語言中文網(wǎng)")
- f1=pygame.freetype.Font("C:/Users/Administrator/Desktop/willhar_.ttf",45)
- # 注意,這里使用render_to() 來繪制文本內(nèi)容,與render 相比,該方法無返回值
- # 參數(shù)說明:
- # pos 繪制文本開始的位置,fgcolor表示前景色,bgcolor表示背景色,rotation表示文本旋轉(zhuǎn)的角度
- freeRect = f1.render_to(screen, pos,"I love c.biancheng.net",fgcolor = GOLD,bgcolor = BLACK, rotation=35)
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- sys.exit()
- pygame.display.update()
程序運行結(jié)果如下:
圖3:繪制文本內(nèi)容
更多建議: