python - Python Turtle 按住键功能
问题描述
我正在尝试使用 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
现在要将其与您的示例联系起来,您可以将您的函数转换为 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 语句的影响。
再一次,对于不完整的解决方案感到抱歉,但我觉得你可以通过更大的乒乓球动作逃脱。
推荐阅读
- python - 使用 BPSK 的瑞利通道中的 BER-SNR 曲线
- jquery - 从提交区域中排除标签
- elixir - 嵌套在另一个列表中的结构中的随机列表
- laravel - laravel 5中auth中间件拦截的表单提交
- ios - 快速加载 tableView
- python - 如何将不定数量的列表添加在一起并输出单个列表?
- javascript - javascript中的劳斯稳定性计算器算法
- windows - windows-SDK public bata 0.1如何搭建?
- javascript - 随机 URL 重定向点击 php 或 Javascript
- assembly - 我将如何在 ARM 中制作斐波那契数列?