gpt4 book ai didi

python - pyglet window.flip() 不更新

转载 作者:行者123 更新时间:2023-12-01 07:40:24 27 4
gpt4 key购买 nike

我正在用 pyglet 画一个圆圈和一些文字。我希望它在按键后更新,但第二次调用 window.flip() 时,窗口只是空的。如有任何建议,我们将不胜感激。

from math import *
from pyglet.gl import *

window = pyglet.window.Window()


def make_circle(x_pos, y_pos, radius, numPoints):
verts = []

glMatrixMode(GL_PROJECTION)
glOrtho(0, 640, 0, 480, -1, 1)
glMatrixMode(GL_MODELVIEW)

glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
glColor3f(1, 1, 0)
for i in range(numPoints):
angle = radians(float(i) / numPoints * 360.0)
x = radius * cos(angle) + x_pos
y = radius * sin(angle) + y_pos
verts += [x, y]
circle = pyglet.graphics.vertex_list(numPoints, ('v2f', verts))
circle.draw(GL_LINE_LOOP)


def text(x, y, text):
label = pyglet.text.Label(text, font_size=36,
x=x, y=y, anchor_x='left', anchor_y='bottom',
color=(255, 123, 255, 255))
label.draw()


make_circle(5, 5, 100, 10)
text(10, 10, 'Test1')
text(30, 30, 'Text2')

window.flip()
input()

make_circle(5, 5, 22, 10)
text(23, 10, 'This text does not appear')
text(30, 23, 'Neither does this one')
window.flip()
input()

最佳答案

如果您不使用默认的事件循环,那么您必须自己执行事件循环的步骤。调用 window.flip() 是不够的.
绘图前请调用pyglet.clock.tick()表示一帧已经过去,window.dispatch_events()轮询操作系统事件队列以查找新事件并调用附加的事件处理程序。
注意,由于事件是手动调度的,因此不需要设置投影矩阵。

另请参阅Dispatching events manually

例如:

from math import *
from pyglet.gl import *

def make_circle(x_pos, y_pos, radius, numPoints):
verts = []

glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
glColor3f(1, 1, 0)
for i in range(numPoints):
angle = radians(float(i) / numPoints * 360.0)
x = radius * cos(angle) + x_pos
y = radius * sin(angle) + y_pos
verts += [x, y]
circle = pyglet.graphics.vertex_list(numPoints, ('v2f', verts))
circle.draw(GL_LINE_LOOP)


def text(x, y, text):
label = pyglet.text.Label(text, font_size=36,
x=x, y=y, anchor_x='left', anchor_y='bottom',
color=(255, 123, 255, 255))
label.draw()

window = pyglet.window.Window()
# make OpenGL context current
window.switch_to()

# signify that one frame has passed
pyglet.clock.tick()
# poll the operating system event queue
window.dispatch_events()

make_circle(5, 5, 100, 10)
text(10, 10, 'Test1')
text(30, 30, 'Text2')

# swap buffers
window.flip()

input()

# signify that one frame has passed
pyglet.clock.tick()
# poll the operating system event queue
window.dispatch_events()

make_circle(5, 5, 22, 10)
text(23, 10, 'This text does not appear')
text(30, 23, 'Neither does this one')

# swap buffers
window.flip()

input()

关于python - pyglet window.flip() 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56749643/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com