if语句中的Python.ontimer

if语句中的Python.ontimer,python,if-statement,timer,turtle-graphics,Python,If Statement,Timer,Turtle Graphics,我的代码中有海龟命令,如下所示。我想在if语句中为这些命令设置一个计时器。我当前的代码就是这样工作的: “#当用户按空格键时,指示灯变为绿色 “#当光线为绿色时,箭头移动50像素 player1.pendown() player1.forward(50) player2.pendown() player2.forward(50) 每次我按空格键时,箭头实际上只移动一次。 我想把它变成一个计时器,这样箭头每60毫秒移动一次,直到用户

我的代码中有海龟命令,如下所示。我想在if语句中为这些命令设置一个计时器。我当前的代码就是这样工作的:

“#当用户按空格键时,指示灯变为绿色

“#当光线为绿色时,箭头移动50像素

        player1.pendown()
        player1.forward(50)
        player2.pendown()
        player2.forward(50)
每次我按空格键时,箭头实际上只移动一次。 我想把它变成一个计时器,这样箭头每60毫秒移动一次,直到用户再次按下空格键

我试着用wn.ontimer,但我一直搞砸了。下面是代码现在的样子:

def advance_state_machine():
    global state_num
    if state_num == 0:
        tess.forward(70)
        tess.fillcolor("red")
        state_num = 1
    else:
        tess.back(70)
        tess.fillcolor("green")
        state_num = 0
        player1.pendown()
        player1.forward(50)
        player2.pendown()
        player2.forward(50)


    wn.onkey(advance_state_machine, "space")

wn.listen()                   
wn.mainloop()

您对问题的描述不一致,代码与描述不同步。以下是我相信您说过希望代码执行的操作:

海龟每60毫秒向前移动一步,每当按下空格键时,海龟会在红色/前进和绿色/后退之间交替移动

我相信这段代码实现了,一个按键事件用于检测空格键,一个定时器事件用于保持海龟运动:

from turtle import Turtle, Screen, mainloop

def advance_state_machine():
    global state_num

    wn.onkey(None, 'space')  # avoid overlapping events

    if state_num > 0:
        tess.fillcolor('green')
    else:
        tess.fillcolor('red')

    state_num = -state_num

    wn.onkey(advance_state_machine, 'space')

def advance_tess():
    tess.forward(state_num)
    wn.ontimer(advance_tess, 60)

wn = Screen()
tess = Turtle()
tess.fillcolor('red')

state_num = 1

wn.onkey(advance_state_machine, 'space')
wn.ontimer(advance_tess, 60)
wn.listen()

mainloop()

在尝试使用空格键之前,请确保单击窗口使其处于活动状态。如果无人看管,乌龟最终会离开屏幕。

“我(原文如此)总是把事情搞砸。”。你怎么会这么想?错误?意外行为?当我输入wn.ontime(Advanced_state_machine,1000)时,它会移动圆圈,然后计时器应用于圆圈。我是否需要专门为计时器创建一个函数,然后在if语句中调用它