为了账号安全,请及时绑定邮箱和手机立即绑定

如何让雪花旋转得更顺畅?

如何让雪花旋转得更顺畅?

牧羊人nacy 2023-09-12 19:56:07
我是Python动画的新手,虽然已经设法使用动画使雪花旋转,但它旋转得不太顺利...我附上了下面的代码,有人可以建议我该怎么做才能让它旋转得更顺畅吗?import turtleimport timebob = turtle.Turtle()bob.ht()screen = turtle.Screen()bob.speed(100)screen.tracer(0, 0)n = 0bob.pencolor("blue")bob.pensize(5)def vshape():  bob.rt(25)  bob.fd(50)  bob.backward(50)  bob.lt(50)  bob.fd(50)  bob.backward(50)  bob.rt(25)def snowflakeArm():  for x in range(4):    bob.fd(30)    vshape()  bob.backward(120)    def snowflake(n, x, y):  bob.seth(n)  bob.pu()  bob.setpos(x ,y)  bob.pd()  for x in range(6):    snowflakeArm()    bob.rt(60)while True:  time.sleep(0.02)  bob.update()  bob.clear()  snowflake(n, 0, 0)  snowflake(n, 350, 0)  snowflake(n, -350, 0)  snowflake(n, 0, 350)  snowflake(n, 0, -350)  n += 10我尝试过减少睡眠时间以及减少旋转量,但仍然没有结果......
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

让我担心的是,您能够bob.update()成功调用,因为update()这不是随 Python 3 或 Python 2 发布的标准turtle.py 中的方法。Turtle您可能正在使用较旧的或非标准的turtle 实现,因此某些下面可能需要调整。


让我们使用一个turtle事件,而不是引入time.sleep()与turtle自己的事件处理程序不同步的:ontimer()


from turtle import Screen, Turtle


def vshape():

    turtle.right(25)

    turtle.forward(50)

    turtle.backward(50)

    turtle.left(50)

    turtle.forward(50)

    turtle.backward(50)

    turtle.right(25)


def snowflakeArm():

    for _ in range(4):

        turtle.forward(30)

        vshape()


    turtle.backward(120)


def snowflake(angle, position):

    turtle.setheading(angle)


    turtle.penup()

    turtle.setposition(position)

    turtle.pendown()


    for _ in range(360 // 60):

        snowflakeArm()

        turtle.right(60)


angle = 0


def snowflakes():

    global angle


    turtle.clear()


    snowflake(angle, (0, 0))

    snowflake(angle, (350, 0))

    snowflake(angle, (-350, 0))

    snowflake(angle, (0, 350))

    snowflake(angle, (0, -350))


    screen.update()


    angle = (angle + 10) % 360


    screen.ontimer(snowflakes, 25)  # repeat 25 milliseconds from now


screen = Screen()

screen.tracer(False)


turtle = Turtle()

turtle.hideturtle()

turtle.pencolor('blue')

turtle.pensize(5)


snowflakes()


screen.exitonclick()

这还应该允许我们通过单击窗口来干净地退出程序,而不会生成所有这些警告消息。


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信