如何更改pyglet中的像素_比率?

2024-09-26 18:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pylet编写了一个游戏。它使用一个宽度为1600,高度为900的静态窗口,假设用户有一个全高清显示器,那么所有东西都可以看到。然而,在一些设备(带有小显示器)上,窗口比预期的要大得多。我发现设置了像素_比率(例如设置为2.0),使每个虚拟像素在物理像素中显示两倍大小(2x2)

我想阻止这种行为,但不知道如何,我知道我可以通过get_pixel_ratio()轻松获得像素比率,但实际上我不知道如何设置它们或阻止pyglet自动设置它们

我还尝试使用glViewport,它似乎有效果,但它没有按照我想要的方式工作

那么,我怎样才能改变像素比或防止自动改变它呢


Tags: 用户游戏get宽度高度静态物理像素
1条回答
网友
1楼 · 发布于 2024-09-26 18:15:31

在官方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只是,我引用:“指示窗口中的实际像素数大于创建的窗口大小。”

这是OSX为应对高DPI而做的事情,使用这些信息,您应该能够相应地缩放图形Window.get_framebuffer_size()将显示请求的窗口大小和帧缓冲区大小的差异(如果有)

因此,实际放大的唯一方法是使用glScale,或者如果使用精灵,则可以使用Sprite.scale来缩放图像数据。如果你使用2D图形,我会选择sprite选项,因为它很容易使用

相关问题 更多 >

    热门问题