python - 这不会改变 Pong 中桨的位置
问题描述
这是我写的代码;不知道我在这里做错了什么。当您按 W 和 S 时,左桨应上下移动,a 和 d 应适用于另一个桨。我目前只是在网上学习一个教程,而且我已经碰壁了。我一辈子都看不出这有什么问题;除非python不允许像这样将变量放入函数中
import turtle
#window set up
wn = turtle.Screen()
wn.title = ("Main Test")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer = 0
#paddleA
paddleA = turtle.Turtle()
paddleA.speed(0)
paddleA.shape("square")
paddleA.color("white")
paddleA.shapesize(stretch_wid=5, stretch_len= 1)
paddleA.penup()
paddleA.goto(-350,0)
#paddleB
paddleB = turtle.Turtle()
paddleB.speed(0)
paddleB.shape("square")
paddleB.color("white")
paddleB.shapesize(stretch_wid=5, stretch_len= 1)
paddleB.penup()
paddleB.goto(350,0)
#ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("white")
ball.penup()
ball.goto(0,0)
#function
def paddle(paddle, dir):
y = paddle.ycor()
y += 20 * dir
paddle.sety(y)
#Keyboard Binding
wn.listen()
wn.onkeypress(paddle(paddleA, 1), "w")
wn.onkeypress(paddle(paddleA, -1), "s")
wn.onkeypress(paddle(paddleB, 1), "a")
wn.onkeypress(paddle(paddleB, -1), "d")
#Main Game Loop
while True:
wn.update()
解决方案
onkeypress
要求:
没有参数的函数或
None
作为第一个参数。您正在有效地传递None
,因为这就是函数调用的评估结果。您可以通过执行以下命令自己查看:
print(type(paddle(paddleA, 1)))
函数调用不是函数!
解决此问题的一种方法是使用 将函数调用包装到匿名函数中lambda
,如下所示:
wn.listen()
wn.onkeypress(lambda: paddle(paddleA, 1), "w")
wn.onkeypress(lambda: paddle(paddleA, -1), "s")
wn.onkeypress(lambda: paddle(paddleB, 1), "a")
wn.onkeypress(lambda: paddle(paddleB, -1), "d")
推荐阅读
- python - BeautifulSoup 不读取 html
- java - java - 设置学生和储物柜数量的问题
- java - 如何将处理中的矩形更改为我正在制作的游戏的图像?
- r - 如何修复 GAMLSS 回归中未找到的 glim.fit 'fit'中的错误
- python-3.x - 为什么进程终止时没有 process.join() 返回?
- flutter - 颤动网格视图值不更新
- python - 调用 destroy() 后 GTK 窗口不消失
- javascript - 变量已定义,但仍未定义错误
- gwt - GWT com.google.gwt.json.client.* JSON 类不支持 jsinterop?
- sql-server - 自动将数据从 CSV 添加到 SQL Server