Python 按键时Pyglet屏幕闪烁

Python 按键时Pyglet屏幕闪烁,python,opengl,pyglet,Python,Opengl,Pyglet,当我运行演示程序时,键盘输入工作正常,但当我按下键盘上的一个键时,屏幕会闪烁。这是随机发生的,不仅仅是在我按下键的时候,而且是在释放的时候 以下是我的渲染函数: @self.win.event def on_draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) #clear backbuffer and z-buffer #calculate view matrix viewM

当我运行演示程序时,键盘输入工作正常,但当我按下键盘上的一个键时,屏幕会闪烁。这是随机发生的,不仅仅是在我按下键的时候,而且是在释放的时候

以下是我的渲染函数:

@self.win.event
    def on_draw():
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) #clear backbuffer and z-buffer
        #calculate view matrix
        viewMatrix = self.lookat(self.cameraPos, self.cameraTarget, self.cameraUp)
        texnum = -1 #set texture to default
        shader = '' #set shader to default
        modelMatrixNum = -1 #set model matrix to default
        glEnable(GL_TEXTURE_2D) #enable textures
        for render in self.renderList: #loop through poly lists in renderList
            try:
                if render['tex'] != texnum: #if this poly list is using a different texture,
                    texnum = render['tex'] #bind it, and reset default
                    glBindTexture(GL_TEXTURE_2D, texnum)
            except KeyError: #but if it doesn't have a texture
                pass #just use the last one
            try:
                if shader != render['shd']: #if this poly list is using a different shader,
                    shader = render['shd']
                    self.shaders[shader].UseProgram() #change shader
                    self.shaders[shader].SetViewMatrix(viewMatrix)
                    self.shaders[shader].SetProjectionMatrix(self.projectionMatrix)
                    self.shaders[shader].SetColorMatrix(self.colorMatrix)
            except KeyError: #but if it doesn't have a shader
                pass #just use the last one

            #now, calculate matrices that vary for each polygon and write them
            try:
                modelMatrix = render['mod'] #see if this polygon has any special modeling matrix
            except KeyError:
                #if not, just use the identity matrix
                modelMatrix = np.identity(4)
            # Set uniforms in shader program
            self.shaders[shader].SetModelMatrix(modelMatrix)
            # Write matrices
            self.shaders[shader].WriteMatrices()

            render['vrt'].draw(render['prm']) #actually draw polygon
        glDisable(GL_TEXTURE_2D)
        self.renderList = [] #clear renderList for next loop
这些是我的输入函数(它们所做的只是显示输入VKID):

我该如何解决这个问题?还有其他人有这个问题吗


编辑:我想出来了。将
pyglet.clock.schedule\u interval(更新,1.0/self.FPS)
更改为
pyglet.clock.schedule(更新)
以60 FPS的速度运行
update
,但如果您为它安排了一个时间间隔,则当您按下键时屏幕会闪烁。

如果您尝试以下代码,是否会遇到同样的问题:(注意:在
\uu init\uuuu
和其他地方添加
self.shaders
self.renderList=[]
等)我像你说的那样更改了它,但现在1)它只显示一个白色屏幕(尽管音乐和声音仍然有效)和2)当你单击关闭按钮时,它会清理并退出,但是窗口仍然打开。如果您尝试以下代码,您是否也会遇到同样的问题:(注意:在
\uuu init\uuu
和其他地方添加
self.shaders
self.renderList=[]
等)我像您所说的那样更改了它,但现在1)它只显示一个白色屏幕(尽管音乐和声音仍然工作)2)当您单击“关闭”按钮时,它将清理并退出,但窗口保持打开状态。
@self.win.event
    def on_key_press(symbol, modifiers):
        print symbol

    @self.win.event
    def on_key_release(symbol, modifiers):
        print symbol