【问题标题】:Python Turtle hold key functionPython Turtle 按住键功能
【发布时间】:2019-02-28 03:39:50
【问题描述】:

我正在尝试使用 Turtle 制作乒乓球,我已经完成了大部分工作,但是,我想实现按住一个键来上下移动保险杠的功能,而不是多次点击该键。到目前为止,这些是我的运动功能。

def lbump_move_up():
    x = lbump.ycor()
    x += bumpspeed
    if x > 240:
        x = 240
    lbump.sety(x)

def lbump_move_down():
    x = lbump.ycor()
    x -= bumpspeed
    if x < -240:
        x = -240
    lbump.sety(x)

def rbump_move_up():
    x = rbump.ycor()
    x += bumpspeed
    if x > 240:
        x = 240
    rbump.sety(x)

def rbump_move_down():
    x = rbump.ycor()
    x -= bumpspeed
    if x < -240:
        x = -240
    rbump.sety(x)

turtle.listen()
turtle.onkey(lbump_move_up,'w')
turtle.onkey(rbump_move_up,'Up')
turtle.onkey(lbump_move_down,'s')
turtle.onkey(rbump_move_down,'Down')
turtle.onkey(ball_move,'Return')

【问题讨论】:

    标签: python python-3.x turtle-graphics


    【解决方案1】:

    我没有一个完整的答案,因为我自己来这里寻找一个。但是,我在这方面取得了一些进展,其他人可以完成......

    您可以创建一个像递归函数一样调用的新类,如下所示:

    class function2:
        def __init__(self,fun,args=None):
            self.fun=fun
            self.args=args
    
        def begin_loop(self):
            self.looping=True
            self.loop()
    
        def loop(self):
            self.fun(self.args)
            if self.looping: self.loop()
    
        def end_loop(self):
            self.looping=False
    

    现在将它与您的示例联系起来,您可以将您的函数转换为 function2,然后将它们称为 onkeypress,如下所示:

    l_up=function2(lbump_move_up)
    r_up=function2(rbump_move_up)
    l_down=function2(lbump_move_down)
    r_down=function2(rbump_move_down)
    
    Wn=turtle.Screen()
    
    Wn.onkeypress(l_up.begin_loop,'w')
    Wn.onkeypress(r_up.begin_loop,'Up')
    Wn.onkeypress(l_down.begin_loop,'s')
    Wn.onkeypress(r_down.begin_loop,'Down')
    
    Wn.onkeyrelease(l_up.end_loop,'w')
    Wn.onkeyrelease(r_up.end_loop,'Up')
    Wn.onkeyrelease(l_down.end_loop,'s')
    Wn.onkeyrelease(r_down.end_loop,'Down')
    
    Wn.listen()
    

    所以问题:RecursionErrors

    如果您希望您的函数引起小的更改,那么您需要长时间按住按钮,这会导致 RecursionErrors - 至少在这种情况下似乎不受 try/except 语句的影响.

    再次对不完整的解决方案表示抱歉,但我觉得你可能会在 pong 中进行更大的动作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多