我正在尝试使用Python和Pyglet制作一个Langton的ant程序。在350×250的网格中重新绘制所有62500个图块需要很长时间,因此我所做的是每当我迭代Langton的Ant部分时,我将更新的图块添加到列表中,当调用on_draw()
时,我绘制更新的矩形并清除列表
@window.event
def on_draw():
Ant.batch.draw() # Draw the grid spaces that were changed
Ant.buffer = [] # Clear the updated grid space buffer
def update(dt):
my_ant.iterate(1) # Run one iteration of Langton's Ant
pyglet.clock.schedule_interval(update, 1/1000)
pyglet.app.run()
但是,这会导致输出闪烁、颜色混合以及模拟运行速度不尽可能快。我还试着不将on_draw()
绑定到window.event
循环中,并每秒调用它60次,但这导致了同样的闪烁和速度问题
def draw(): # Don't tie drawing the screen into the event loop
Ant.batch.draw() # Draw the grid spaces that were changed
Ant.buffer = [] # Clear the updated grid space buffer
def update(dt):
my_ant.iterate(1) # Run one iteration of Langton's Ant
pyglet.clock.schedule_interval(update, 1/1000)
pyglet.clock.schedule_interval(draw, 1/60) # Update the screen 60 times a second
pyglet.app.run()
我真的很喜欢第二种方法对帧和模拟时间的控制,因此,如果有任何方法可以保持相同的一般方法,但修复闪烁,那就太好了。 我是python/pyglet新手,所以如果有任何方法可以在不编写自定义事件循环的情况下实现我想要的功能,那也很好
Here是指向所有代码的链接,它只需要安装pyglet即可。提前谢谢
编辑:添加链接
我想问题来自部门:(
在Python中:
这是一个整数除法,因为1和60是整数,您应该改为:
1.0/60
如果需要浮点除法,则必须将其中一个数字显式写入浮点:1.0
您应该使用
on_draw
窗口事件,而不是调度自己的绘图函数。您还需要在绘制之前清除窗口相关问题 更多 >
编程相关推荐