Python:使用 Turtle-graphics,Screen.tracer() 和 Screen.update() 有问题。 ‘update()’的放置使我的代码 运行 / not-run 正确

Python : Using Turtle-graphics, having issue with Screen.tracer() and Screen.update(). Placement of’ update() ‘ makes my code run / not-run properly

我正在尝试制作 Pong 游戏,正如您在屏幕截图中看到的(在本问题的末尾),我在右侧创建了一个球拍。

以下代码一切正常,当我按下向上和向下箭头时,桨会上下移动。

请注意语句“screen.update()”

的位置
from turtle import Turtle,Screen
import time

screen = Screen()
screen.setup(width=800,height=600)
screen.bgcolor("black")
screen.title("Pong")
screen.tracer(0)

paddle = Turtle()
paddle.shape("square")
paddle.color("white")
paddle.shapesize(stretch_wid=5,stretch_len=1)
paddle.penup()
paddle.goto(350,0)


def go_up():
    new_y = paddle.ycor() + 20
    paddle.goto(paddle.xcor(),new_y)

def go_down():
    new_y = paddle.ycor() - 20
    paddle.goto(paddle.xcor(),new_y)

screen.listen()
screen.onkey(go_up,"Up")
screen.onkey(go_down,"Down")


game_is_on = True

while game_is_on:
    screen.update()




screen.exitonclick()


但是当我从 while look 中取出语句“screen.update()”时,删除 while 循环并将语句“screen.update()”放在 paddle.goto(350,0 )语句,桨的运动停止工作,更改后的代码(non-working代码)如下:

(请再次注意下方声明“screen.update()”的位置)

from turtle import Turtle,Screen
import time

screen = Screen()
screen.setup(width=800,height=600)
screen.bgcolor("black")
screen.title("Pong")
screen.tracer(0)

paddle = Turtle()
paddle.shape("square")
paddle.color("white")
paddle.shapesize(stretch_wid=5,stretch_len=1)
paddle.penup()
paddle.goto(350,0)
screen.update()


def go_up():
    new_y = paddle.ycor() + 20
    paddle.goto(paddle.xcor(),new_y)

def go_down():
    new_y = paddle.ycor() - 20
    paddle.goto(paddle.xcor(),new_y)

screen.listen()
screen.onkey(go_up,"Up")
screen.onkey(go_down,"Down")





screen.exitonclick()

我想知道:-

  1. 为什么我的代码在第二种情况下不起作用
  2. 为什么我的代码在第一个案例中工作

谢谢。

Why is my code not working in SECOND CASE

因为您没有在您希望用户看到的所有更改处放置 screen.update()。特别是 go_up()go_down() 方法:

from turtle import Turtle, Screen

def go_up():
    paddle.sety(paddle.ycor() + 20)
    screen.update()

def go_down():
    paddle.sety(paddle.ycor() - 20)
    screen.update()

screen = Screen()
screen.setup(width=800, height=600)
screen.bgcolor('black')
screen.title("Pong")
screen.tracer(0)

paddle = Turtle()
paddle.shape('square')
paddle.color('white')
paddle.shapesize(stretch_wid=5, stretch_len=1)
paddle.penup()
paddle.setx(350)

screen.update()

screen.onkey(go_up, 'Up')
screen.onkey(go_down, 'Down')
screen.listen()

screen.exitonclick()

Why makes my code work in FIRST CASE

因为您连续调用 screen.update(),即太频繁了,所以它恰好捕获了所有更改。