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()
我想知道:-
- 为什么我的代码在第二种情况下不起作用
- 为什么我的代码在第一个案例中工作
谢谢。
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()
,即太频繁了,所以它恰好捕获了所有更改。
我正在尝试制作 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()
我想知道:-
- 为什么我的代码在第二种情况下不起作用
- 为什么我的代码在第一个案例中工作
谢谢。
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()
,即太频繁了,所以它恰好捕获了所有更改。