如何在不使用time.sleep()的情况下每隔几秒移动一次乌龟?

时间:2016-06-02 17:34:28

标签: python turtle-graphics

我正在用乌龟制作俄罗斯方块游戏。

当块关闭时,我使用time.sleep()使其等待几秒钟才会出现故障。但是,time.sleep()使整个代码停止,我只希望停止定义:

def moveDown():
    time.sleep(2)
    turtle(sety(100)
    time.sleep(2)
    turtle.sety(0)
    time.sleep(2)
    turtle.sety(-100)
    time.sleep(2)
    turtle.sety(-200)
    setBlock()

我不希望ENTIRE代码停止,因为播放器需要使用左右键在屏幕上导航。那么,我将如何实现这一目标?对不起,如果这是非常粗糙和混乱。

2 个答案:

答案 0 :(得分:1)

time.sleep()的作用是它被称为“阻塞调用”,这意味着当它被调用时,你的进程在完成之前不会继续进行。您需要让另一个线程/进程在后台运行才能使其移动。 像这样:

not (x and not y and z)

然后在你的代码的其他地方:

def moveDown():
    turtle.sety(turtle.ycor())
    if moveable:
        screen.ontimer(moveDown, 2000) #ms

然后停止:

...
    moveable=True
    moveDown()
...

这是一个非常简单的例子(基于python.org示例)

答案 1 :(得分:0)

time.clock()可以报告自启动以来的秒数,因此您可以检查它是否允许用户在底部输入命令一段时间

import time
junk = time.clock()
pause_at_bottom = 0.5
## code till it hits the bottom
at_bottom = time.clock()
while time.clock() < (at_bottom + pause_at_bottom):
    ## code to run while at the bottom
## code to run once time has elapsed at bottom