<p>我正在尝试使用Python和Pyglet制作一个Langton的ant程序。在350×250的网格中重新绘制所有62500个图块需要很长时间,因此我所做的是每当我迭代Langton的Ant部分时,我将更新的图块添加到列表中,当调用<code>on_draw()</code>时,我绘制更新的矩形并清除列表</p>
<pre><code>@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()
</code></pre>
<p>但是,这会导致输出闪烁、颜色混合以及模拟运行速度不尽可能快。我还试着不将<code>on_draw()</code>绑定到<code>window.event</code>循环中,并每秒调用它60次,但这导致了同样的闪烁和速度问题</p>
<pre><code>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()
</code></pre>
<p>我真的很喜欢第二种方法对帧和模拟时间的控制,因此,如果有任何方法可以保持相同的一般方法,但修复闪烁,那就太好了。
我是python/pyglet新手,所以如果有任何方法可以在不编写自定义事件循环的情况下实现我想要的功能,那也很好</p>
<p><a href="https://github.com/LoneSurvivr314/Langtons-Ant/blob/Render-Update/Langton%27s%20Ant.py" rel="nofollow noreferrer">Here</a>是指向所有代码的链接,它只需要安装pyglet即可。提前谢谢</p>
<p>编辑:添加链接</p>