0

新的 Python 程序员在这里。我正在尝试在不使用教程的情况下用 python 编写 Snake。我现在正在处理键绑定,但我遇到了问题

#Move snake to the left
def move_right():
    right = snake.xcor()
    right += 20
    snake.setx(right)

#Key bind "d" 
wn.listen
wn.onkeypress(move_right(), "d")

上面的代码应该在按下“d”键时将蛇向右移动,但它不起作用。但是,当从 YouTube 上的教程中从功能齐全的 Pong 程序中复制代码时,它确实有效。复制的代码是这样的:

#Function for paddle_b_up
def paddle_b_up():  
    y = paddle_b.ycor() 
    y += 20  
    paddle_b.sety(y)  

#key bind to the up arrow key
wn.onkeypress(paddle_b_up, "Up")

然后我继续将复制的代码写出,就像它在 Pong 程序中所写的一样,写入 Snake 程序,但它不起作用。我很迷茫。缩进是一样的,代码是一样的(除了一些不同但一致的变量),只有 Pong 程序中的移动和键绑定代码被复制到 Snake 程序中。在不更改任何其他内容的情况下,Pong 代码可以工作,但只有当我将代码复制并粘贴到 Snake 程序中时。有什么建议吗?谢谢你。

4

1 回答 1

1

注意两次调用的区别wn.onkeypress()。在复制的代码中没有()after paddle_b_up,但在您的代码中有move_right().

当您()在函数名称之后放置它时,它会立即调用它。但是您希望稍后在按下该键时调用该函数。您需要传递对函数的引用,而不是调用函数的结果。

wn.onkeypress(move_right, "d")

你还需要()afterwn.listen所以你调用这个函数。

于 2020-05-10T05:51:35.787 回答