Python 海龟动画随机加速/减速

Python 海龟动画随机加速/减速,python,turtle-graphics,Python,Turtle Graphics,如何阻止海龟动画随机加速/减速 我一直在尝试用Python制作一个乒乓球游戏;然而,球似乎不时地随机加速和减速。我该如何阻止这种情况发生 我尝试过改变球的速度变量,但那没有帮助。我也研究了解决这个问题的方法,但是我找不到任何有用的方法 import turtle # Window settings wn = turtle.Screen() wn.title('Classic Pong v1.0') wn.bgcolor('black') wn.setup(width=800, height=6

如何阻止海龟动画随机加速/减速

我一直在尝试用Python制作一个乒乓球游戏;然而,球似乎不时地随机加速和减速。我该如何阻止这种情况发生

我尝试过改变球的速度变量,但那没有帮助。我也研究了解决这个问题的方法,但是我找不到任何有用的方法

import turtle

# Window settings
wn = turtle.Screen()
wn.title('Classic Pong v1.0')
wn.bgcolor('black')
wn.setup(width=800, height=600)
wn.tracer(0)

# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape('square')
ball.color('white')
ball.penup()
ball.dx = 0.1   # Ball moves by 0.1 pixels every time
ball.dy = 0.1

# Main game loop
while True:
    wn.update()

    # Moving the ball
    ball.setx(ball.xcor() + ball.dx)    # Updates the position of the ball every time
    ball.sety(ball.ycor() + ball.dy)

    # Border collision checking
    if ball.ycor() > 290:
        ball.sety(290)
        ball.dy *= -1

    if ball.ycor() < -280:      # Set to 280 to account for extra space
        ball.sety(-280)
        ball.dy *= -1

    if ball.xcor() > 380:       # Set to 280 to account for extra space
        ball.goto(0, 0)
        ball.dx *= -1


    if ball.xcor() < -390:
        ball.goto(0, 0)
        ball.dx *= -1
导入海龟
#窗口设置
wn=tutle.Screen()
wn.title('Classic Pong v1.0')
wn.bgcolor('黑色')
wn.设置(宽度=800,高度=600)
wn.tracer(0)
#球
ball=海龟。海龟()
球速(0)
球形(“方形”)
球的颜色(“白色”)
ball.penup()
ball.dx=0.1#ball每次移动0.1像素
ball.dy=0.1
#主游戏循环
尽管如此:
wn.update()
#移动球
ball.setx(ball.xcor()+ball.dx)#每次更新球的位置
ball.sety(ball.ycor()+ball.dy)
#边境碰撞检查
如果ball.ycor()大于290:
鲍尔·塞蒂(290)
ball.dy*=-1
如果ball.ycor()<-280:#设置为280以考虑额外空间
球。赛蒂(-280)
ball.dy*=-1
如果ball.xcor()大于380:#设置为280以考虑额外空间
球。转到(0,0)
ball.dx*=-1
如果ball.xcor()小于-390:
球。转到(0,0)
ball.dx*=-1

我希望球的动画是平滑的;但是,动画的速度是随机变化的。

我不知道为什么动画会加速或减慢。无论如何,以下是我将如何基于以下问题编写相同的代码:

  • while True:
    循环在基于事件的环境中没有位置,例如 海龟——如果它现在不是问题,它将成为一个问题。我已经 将其替换为计时器事件

  • 0.1的像素移动非常小,在图像中看起来总是很慢 乌龟

  • 避免要求海龟在关键循环中做任何它不需要做的事情。 调用
    setx()
    sety()
    xcor()
    ycor()
    goto()
    您在海龟实例上进行了十几次方法调用。在我的 重写我在关键循环中只有两个海龟调用,
    position()
    setposition()

  • 当我插入我的指令时,我放下了
    tracer()
    update()
    关键循环,只有一个海龟叫声改变了 在每次更新时显示屏幕,这是
    tracer()的默认设置
    --所以什么都没有得到

修订守则:

from turtle import Screen, Turtle

WIDTH, HEIGHT = 800, 600
CURSOR_SIZE = 20

ball_dx = 1
ball_dy = -2.5

def move():
    global ball_dx, ball_dy

    x, y = ball.position()

    y += ball_dy

    # Border collision checking
    if not CURSOR_SIZE - HEIGHT/2 < y < HEIGHT/2 - CURSOR_SIZE:
        ball_dy *= -1

    x += ball_dx

    if not CURSOR_SIZE - WIDTH/2 < x < WIDTH/2 - CURSOR_SIZE:
        x = y = 0
        ball_dx *= -1

    ball.setposition(x, y)

    screen.ontimer(move, 50)

# Window settings
screen = Screen()
screen.title('Classic Pong v1.1')
screen.setup(WIDTH, HEIGHT)
screen.bgcolor('black')

# Ball
ball = Turtle()
ball.shape('square')
ball.color('white')
ball.speed('fastest')
ball.penup()

move()
screen.mainloop()
从海龟导入屏幕,海龟
宽度,高度=800600
光标大小=20
球_dx=1
球直径=-2.5
def move():
全局球_dx,球_dy
x、 y=球位置()
y+=球
#边境碰撞检查
如果不是光标大小-高度/2
**

导入海龟
导入时间#更改1
#窗口设置
wn=tutle.Screen()
wn.title('Classic Pong v1.0')
wn.bgcolor('黑色')
wn.设置(宽度=800,高度=600)
wn.tracer(0)
#球
ball=海龟。海龟()
球速(0)
球形(“方形”)
球的颜色(“白色”)
ball.penup()
ball.dx=4#ball每次移动0.1像素
ball.dy=4#change 3将其更改为8,8可以加快移动速度
#主游戏循环
尽管如此:
wn.update()
#移动球
#每次更新球的位置
ball.setx(ball.xcor()+ball.dx)
ball.sety(ball.ycor()+ball.dy)
时间。睡眠(.03)#改变2
#边境碰撞检查
如果ball.ycor()大于290:
鲍尔·塞蒂(290)
ball.dy*=-1
如果ball.ycor()<-280:#设置为280以考虑额外空间
球。赛蒂(-280)
ball.dy*=-1
如果ball.xcor()大于380:#设置为280以考虑额外空间
球。转到(0,0)
ball.dx*=-1
如果ball.xcor()小于-390:
球。转到(0,0)

ball.dx*=-1
请避免只回答代码问题。试着解释一下你做了什么,怎么做,为什么做。