gpt4 book ai didi

python - 按下按键时窗口显示上一帧

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:49 25 4
gpt4 key购买 nike

我创建了一个简单的脚本,显示一个向左移动的正方形:

import pyglet

window = pyglet.window.Window(800, 600)

x = 0
y = 250
width = 100
height = 100


def update(time):
global x

window.clear()
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x, y, x, y+height, x+width, y+height, x+width, y]))
x += 10


pyglet.clock.schedule_interval(update, 1/10)

pyglet.app.run()

当没有键盘输入时,正方形会正确渲染,但每当我按下一个键时,看起来窗口就会被清除,并且前一帧会再次渲染。我通过拆分更新函数并使用 on_key_press() 函数解决了这个问题:

@window.event
def on_key_press(symbol, modifiers):
draw()


def update(time):
global x
x += 10
draw()


def draw():
window.clear()
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x, y, x, y + height, x + width, y + height, x + width, y]))

但我认为这不是解决问题的正确方法,因为我在一帧中渲染正方形两次。您可以在这里查看问题所在:https://youtu.be/cIwuLYuLWtY .

最佳答案

在 pyglet 中,窗口应该在 on_draw() 中重绘。另请参阅Writing a pyglet application .
事件发生后,on_draw 事件被执行并更新窗口。
当没有实现 on_draw 事件时,似乎在双缓冲上下文中,在按键事件之后触发了缓冲区交换。由于场景未更新(因为也没有 on_draw),因此显示前一帧。

我建议实现一个 on_draw 事件来重绘窗口:

import pyglet

window = pyglet.window.Window(800, 600)
x, y, width, height = 0, 250, 100, 100

def update(time):
global x
x += 10

@window.event
def on_draw():
window.clear()
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x, y, x, y+height, x+width, y+height, x+width, y]))

pyglet.clock.schedule_interval(update, 1/10)
pyglet.app.run()

关于python - 按下按键时窗口显示上一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576644/

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