pygame 的字體使用


轉載注明鏈接: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()
    

程序運行結果如下所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM