繁体   English   中英

Python Turtle 按住键函数

[英]Python Turtle hold key function

我正在尝试使用 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')

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

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

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

现在将其绑定到您的示例,您可以将函数转换为function2s,然后按如下所示在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语句的影响。

再次对不完整的解决方案感到抱歉,但是我觉得您可能可以摆脱乒乓球中较大的运动。

使用“turtle.onkeypress(fun, key=None)”而不是“turtle.onkey(fun, key)”为我解决了这个问题。

https://docs.python.org/3/library/turtle.html#turtle.onkeypress

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM