首页 > 解决方案 > 这不会改变 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()

标签: pythonturtle-graphicspython-turtlepong

解决方案


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")

推荐阅读