URLhttps://learnscript.net/zh-hant/pygame/display/graphics/
    複製連結移至說明  範例

    如何為遊戲設定顯示驅動,OpenGL?以及取得圖形環境和視窗的資訊

    閱讀 9:35·字數 2876·發佈 
    Youtube 頻道
    訂閱 375

    在 Pygame 中為遊戲設定顯示驅動

    事實上,Pygame 套件似乎沒有提供直接設定顯示驅動的函式或方法,當display模組進行初始化時,Pygame 將根據目前的作業系統和使用者權限,自行選擇遊戲所采用的顯示驅動。在 Windows 中,可采用的顯示驅動通常有windibdirectx,在 UNIX/Linux 中,可采用的顯示驅動通常有x11dgafbcondirectfbggivglsvgalibaalib

    當然,你可以通過在作業系統中新增環境變數SDL_VIDEODRIVER,來指定顯示驅動,比如,在 Windows 作業系統中,將SDL_VIDEODRIVER設定為windib

    環境變數

    關於環境變數,你可以檢視程式設計指南什麽是環境變數一節。

    取得目前顯示驅動的名稱

    display模組的get_driver函式,可用於取得遊戲目前使用的顯示驅動的名稱。

    get_driver()

    傳回值

    get_driver函式的傳回值是一個表示顯示驅動名稱的字串。

    driver.py
    # 匯入並初始化 display 模組
    from pygame import display
    display.init()
    
    print(f'目前顯示驅動:{display.get_driver()}')
    目前顯示驅動:windows

    取得和設定 OpenGL 屬性

    如果在呼叫set_mode函式時,為參數flags使用了OPENGL,那麽你可以使用display模組的gl_get_attributegl_set_attribute函式,來取得和設定與 OpenGL 相關的屬性。

    gl_get_attribute(flag)

    flag 參數

    flag參數是需要取得的 OpenGL 屬性所對應的整數,一般會選擇pygame模組中以GL_開頭的變數作為該參數的值,比如GL_CONTEXT_MAJOR_VERSION

    傳回值

    gl_get_attribute函式傳回一個表示 OpenGL 屬性值的整數。

    gl_set_attribute(flag, value)

    flag 參數

    flag參數是需要設定的 OpenGL 屬性所對應的整數,一般會選擇pygame模組中以GL_開頭的變數作為該參數的值,比如GL_CONTEXT_MAJOR_VERSION

    value 參數

    value參數是一個整數,對應了 OpenGL 屬性的值。

    gl_set_attribute 函式應該在建立遊戲視窗之前呼叫

    要設定 OpenGL 的某些屬性,應該在建立遊戲視窗之前呼叫gl_set_attribute函式,否則可能無法達到想要的效果。

    顯示,視窗,熒幕

    更多關於display模組的set_mode函式的資訊,請檢視建立遊戲視窗一段。

    在下面的範例中,第三個函式gl_set_attribute不會產生效果,因為set_mode函式已經被呼叫。

    opengl.py
    # 匯入並初始化 display 模組
    from pygame import display
    display.init()
    
    from pygame import OPENGL, FULLSCREEN, GL_CONTEXT_MAJOR_VERSION, GL_ACCELERATED_VISUAL, GL_DEPTH_SIZE
    # 設定與 OpenGL 相關的屬性 display.gl_set_attribute(GL_CONTEXT_MAJOR_VERSION, 4) display.gl_set_attribute(GL_ACCELERATED_VISUAL, 0)
    # 建立一個采用 OpenGL 的全熒幕遊戲視窗 display.set_mode([0, 0], OPENGL | FULLSCREEN)
    # 下面的陳述式不會產生效果 display.gl_set_attribute(GL_DEPTH_SIZE, 32)
    # 取得與 OpenGL 相關的屬性 print(f'GL_CONTEXT_MAJOR_VERSION:{display.gl_get_attribute(GL_CONTEXT_MAJOR_VERSION)}') print(f'GL_ACCELERATED_VISUAL:{display.gl_get_attribute(GL_ACCELERATED_VISUAL)}') print(f'GL_DEPTH_SIZE:{display.gl_get_attribute(GL_DEPTH_SIZE)}')
    GL_CONTEXT_MAJOR_VERSION:4
    GL_ACCELERATED_VISUAL:0
    # 並非程式碼中設定的 32
    GL_DEPTH_SIZE:16

    取得圖形環境資訊

    display模組的Info函式,將傳回一個_VidInfo物件,該物件包含與目前圖形環境相關的資訊。在呼叫set_mode函式設定顯示模式之後,你可以呼叫Info函式來驗證顯示模式是否已經生效。

    Info()

    傳回值

    Info函式傳回一個包含目前圖形環境資訊的_VidInfo物件。

    在建立遊戲視窗之前呼叫 Info 函式可能會獲得預設圖形環境的資訊

    如果在建立遊戲視窗之前,呼叫Info函式,那麽某些作業系統會提供預設圖形環境的資訊。

    display模組的_VidInfo物件,僅簡單的包含了一些表示圖形環境資訊的變數,就目前而言,這些變數中的某些不會被設定,他們始終保持為0

    hw 變數

    hw變數可能始終保持為0,如果為1則表示已經啟用了硬體加速。

    wm 變數

    wm變數始終保持為1,表示視窗可以使用視窗模式顯示。

    video_mem 變數

    video_mem變數可能始終保持為0,表示用於顯示的記憶體大小(以兆位元組為單位),如果為0則表示大小未知。

    bitsize 變數

    bitsize變數表示用多少個 bit 來儲存一個像素。

    bytesize 變數

    bytesize變數表示用多少個位元組來儲存一個像素。

    masks,shifts,losses 變數

    masksshiftslosses變數是包含四個整數的 Python 元組,四個整數被用於將色彩中的紅色,綠色,藍色,透明度寫入像素。

    blit_hw,blit_hw_CC,blit_hw_A,blit_sw,blit_sw_CC,blit_sw_A 變數

    blit_hwblit_hw_CCblit_hw_Ablit_swblit_sw_CCblit_sw_A變數可能始終保持為0,如果為1則表示硬體或軟體加速的某一項功能已經啟用。

    current_h 變數

    current_h變數是表示遊戲視窗表面高度的整數。

    current_w 變數

    current_w變數是表示遊戲視窗表面寬度的整數。

    下面,我們在建立遊戲視窗之前和之後,呼叫Info函式來取得預設和目前的圖形環境資訊。

    由於所設定的顯示模式並不支援全熒幕模式下的表面大小 400x300,最終的表面大小被 Pygame 設定為了 640x480。

    info.py
    # 匯入 display 模組和 FULLSCREEN,並進行初始化
    from pygame import display, FULLSCREEN
    display.init()
    
    # 嘗試取得預設的圖形環境的資訊 info = display.Info() print(f'預設的表面大小:{info.current_w}x{info.current_h}')
    # 嘗試建立一個表面大小為 400x300 並全熒幕顯示的視窗 s = display.set_mode((400, 300), FULLSCREEN)
    # 取得目前的圖形環境的資訊 info = display.Info() print(f'表面大小:{info.current_w}x{info.current_h}')
    預設的表面大小:2560x1440
    表面大小:640x480

    取得視窗資訊

    display模組的get_wm_info函式,其傳回值是一個 Python 字典,包含了由作業系統提供的與遊戲視窗相關的資訊,字典中的鍵值組的鍵為字串型別。get_wm_info可能不像你所期望的那樣實用,因為作業系統可能不會提供關於遊戲視窗的任何資訊,函式會傳回一個空的 Python 字典,而在另一些情況下,字典可能會包含一個鍵為window的鍵值組,其值為遊戲視窗的控製碼。

    get_wm_info()

    傳回值

    get_wm_info函式的傳回值是一個 Python 字典,包含由作業系統提供的與遊戲視窗有關的資訊。

    在下面的範例中,作業系統未提供與遊戲視窗有關的資訊。

    window.py
    # 匯入並初始化 display 模組
    from pygame import display
    display.init()
    
    # 取得由作業系統提供的關於遊戲視窗的資訊 print(f'遊戲視窗資訊:{display.get_wm_info()}')
    {}

    原始碼

    src/zh-hant/display/graphics·codebeatme/pygame·GitHub