創作內容

4 GP

Python & Pygame 學習筆記 - Pygame中文字顯示白框

作者:奪命莎莎醬│2017-08-04 00:30:14│巴幣:8│人氣:7811
文為一個程式設計自學初學者的學習筆記,算不上是教學,重點在於記錄下遭遇的問題和解決問題的方法,而且問題本身可能非常低級...。

不知道文章分類該掛什麼好,姑且分在興趣嗜好吧。

Python雖號稱三大受歡迎的程式語言之一,網路上能找到的教學資源也算豐富,但仍遠遠不比C++及Java,華語的線上討論區甚至可以說是沒有的,因此,若有同好走過路過,對我的文章內容有什麼見解,歡迎參與討論。


Pygame中文字顯示白框?


我想這應該也不是專屬中文字的問題啦,不管顯示出問題的是什麼奇奇怪怪的符號,這問題其實在於程式找不到可用來顯示文字的字體檔。用

pygame.font.SysFont("字體名稱", 字體大小)

指定字體檔的方式非常不可靠,找不到字體檔時也不會哀一聲說沒找到(也可能是Console的問題),直接塞幾個白框敷衍了事。網路上查遍各種資料,中文顯示問題大多是說跟編碼有關,要加個什麼u前綴轉unicode什麼的。不!至少在這問題上跟編碼沒半毛錢關係,關鍵在於,到底如何才能讓程式找到指定的字體檔。

最保險的方法絕對是把字體檔和程式碼放在一起。如:

pygame.font.Font("Fonts/msjh.ttc", 24)

Fonts/msjh.ttc的意思是在放置程式碼的資料夾中創建一個專放字體檔的Fonts資料夾,字體檔跟著程式走,確保不會找不到字體。當然若不想多建一層資料夾,字體檔直接跟程式碼放一起就只需檔名+副檔名即可。

msjh.ttc是微軟正黑體,其他還有像是新細明體mingliu.ttc,標楷體kaiu.ttf

以下為我作為練習而寫的程式碼的節錄,作為範例還是有不少多餘的東西,而且畢竟是初學者寫的...大概還有不少改進空間...,總之就將就著用了。此外,巴哈畢竟不是專門給人分享程式碼的地方,沒有專門展示程式碼的工具(或是我不會用XD),所以我稍微花了點時間調整顏色,使整體看起來更舒服易讀,但比竟是手動調整,不保證不會漏掉什麼,也不保證每篇文章都會這麼厚工。

import pygame

def show_text(text, x, y):#專門顯示文字的方法,除了顯示文字還能指定顯示的位置
    x = x
    y = y
    text = font.render(text, True, (255, 255, 255))
    screen.blit(text, (x, y))
    pygame.display.update()

pygame.init()

version = " v0.0.0"
pygame.display.set_caption("test" + version)

clock = pygame.time.Clock()

screen = pygame.display.set_mode((800, 600))

background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((125, 125, 125))
screen.blit(background, (0, 0))

font = pygame.font.Font("Fonts/msjh.ttc", 24)#本文主角

pygame.display.update()

running = True
run_opening = True
while running:
    
    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
    if run_opening:
        op_background = pygame.Surface(screen.get_size())
        op_background = op_background.convert()
        op_background.fill((0, 0, 0))
        screen.blit(op_background, (0, 0))
        
        text = "中文中文abc123"#文字顯示內容在此,根本用不著u
        show_text(text, 100, 0)#使用show_text()
        
        pygame.display.update()
        
pygame.quit()

執行結果:

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3669589
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Python|Pygame|遊戲|程式設計

留言共 1 篇留言


謝謝你的文章請問樹莓派或LINUX中文字型檔存在什麼位置呢

11-21 14:30

奪命莎莎醬
這我不清楚呢 沒接觸過11-21 22:39
我要留言提醒:您尚未登入,請先登入再留言

4喜歡★Wilseanhsu 可決定是否刪除您的留言,請勿發表違反站規文字。

追蹤私訊切換新版閱覽

作品資料夾

mine0rain好緊張
明天要考檢定了好緊張看更多我要大聲說昨天18:52


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】