簡體   English   中英

如何更改pyglet中的pixel_ratio?

[英]How to change pixel_ratio in pyglet?

我使用pylet編寫了一個游戲。 它使用 static window,寬度為 1600,高度為 900,假設用戶擁有全高清顯示屏,因此一切都將可見。 然而,在某些設備(帶有小顯示器)上,window 比預期的要大得多。 我發現pixel_ratio已設置(例如設置為2.0),使每個虛擬像素以物理像素顯示雙倍大小(2x2)。

我想防止這種行為,但不知道如何,我知道我可以通過 get_pixel_ratio() 輕松獲得像素比,但我實際上不知道如何設置它們或防止 pyglet 自動設置它們。

我還嘗試使用 glViewport 似乎有效果,但它沒有按我想要的方式工作。

那么如何更改 pixel_ratio 或防止自動更改它。

在官方 discord 服務器中詢問信息,因為我試圖用一些代碼自己重現這個問題,這是我用來測試它的:

import math
from pyglet import *
from pyglet.gl import *

key = pyglet.window.key

class main(pyglet.window.Window):
    def __init__ (self, width=800, height=600, fps=False, *args, **kwargs):
        super(main, self).__init__(width, height, *args, **kwargs)
        self.x, self.y = 0, 0

        self.keys = {}

        verts = []
        for i in range(30):
            angle = math.radians(float(i)/30 * 360.0)
            x = 100*math.cos(angle) + 300
            y = 100*math.sin(angle) + 200
            verts += [x,y]

        self.pixel_ratio = 100
        self.circle = pyglet.graphics.vertex_list(30, ('v2f', verts))

        self.alive = 1

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def on_key_release(self, symbol, modifiers):
        try:
            del self.keys[symbol]
        except:
            pass

    def on_key_press(self, symbol, modifiers):
        if symbol == key.ESCAPE: # [ESC]
            self.alive = 0

        self.keys[symbol] = True

    def render(self):
        self.clear()

        glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
        glColor3f(1,1,0)
        self.circle.draw(GL_LINE_LOOP)

        self.flip()

    def run(self):
        while self.alive == 1:
            self.render()

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()

if __name__ == '__main__':
    x = main()
    x.run()

並不是說代碼很重要,因為變量pixel_ratio只是,我引用: “表明 window 中的實際像素數大於創建的 Window 的大小。”

這是 OSX 為應對高 DPI 所做的事情,使用此信息您應該能夠相應地縮放圖形。 Window.get_framebuffer_size()將顯示請求的 Window 大小和幀緩沖區大小(如果有)的差異。

因此,您實際放大的唯一方法是使用glScale ,或者如果您使用精靈,您可以使用Sprite.scale來縮放圖像數據。 如果您使用的是 2D 圖形,我會使用帶有 sprite 選項的 go,因為它很容易使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM