在官方不和谐服务器中询问信息,因为我试图用一些代码自己重现问题,这就是我用来测试它的内容:
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 选项,因为它很容易使用。