【问题标题】:How can I move the turtle every few seconds without using time.sleep()?如何在不使用 time.sleep() 的情况下每隔几秒移动一次海龟?
【发布时间】:2016-06-02 17:34:28
【问题描述】:

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

当块关闭时,我使用 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()

我不希望整个代码停止,因为玩家需要使用左右键在屏幕上导航。那么,我将如何实现这一目标?很抱歉,如果这非常混乱和混乱。

【问题讨论】:

  • 在这种情况下,您要做的只是在经过一定时间后才移动块。您可以通过保存初始时间来做到这一点,然后将当前时间与初始时间进行比较,直到足够的时间过去。至少,这是一种简单的方法——可能还有其他更好的方法。
  • 你想要的是使用turtle.ontimerdocs.python.org/2/library/…(你也应该澄清你的标题并将turtle添加到标签中。

标签: python turtle-graphics


【解决方案1】:

time.sleep() 发生的事情是所谓的“阻塞调用”,这意味着当它被调用时,您的进程在完成之前不会继续。您需要在后台运行另一个线程/进程以使其移动。 像这样的:

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

然后在您的代码中的其他地方:

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

然后停止它:

...
    moveable=False
...

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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      相关资源
      最近更新 更多