pygame 的字型使用
阿新 • • 發佈:2020-07-04
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()
程式執行結果如下所示: