Zelle图形动画

0 投票
1 回答
1033 浏览
提问于 2025-04-30 16:56

我正在用Python和Zelle图形库做一个简单的轮盘赌程序。下面是我的代码,我想让小球在两个圆圈之间移动(轨道上)。有没有办法做到这一点?我想的办法是先把小球隐藏(ball.undraw()),然后在0.10秒后再把它画出来(time.sleep(.10)),但我不知道怎么计算才能让它在轨道上移动。

来自graphics库的内容:

Circle1 = Circle(Point(100,100),95) #Makes the first Circle
Circle1.draw(win)

Circle2 = Circle(Point(100,100),80) #Makes the second Circle
Circle2.draw(win) 

Ball = Circle(Point(100,12),5) #Makes the ball Circle
Ball.draw(win) 

win.getMouse()
win.close()

main()

暂无标签

1 个回答

2

你要找的方法是 move(dx, dy)。

要计算小球在每个方向上需要移动的距离,你得先找到小球的新位置。小球的新位置的 x 和 y 坐标会和连接小球与轮子中心的那条线的角度的正弦和余弦有关,这些可以通过数学库里的函数来计算。

x = radius*sin(angle)
y = radius*cos(angle)

注意:如果你把坐标设置为 (-100, -100, 100, 100),这样圆心就会在 (0, 0),计算起来会更简单。

现在你已经得到了小球的新位置,它在每个方向上移动的距离就是新位置减去初始位置。

Ball.move(x - Ball.getCenter().getX(), y - Ball.getCenter().getY())

把这些放进一个循环里,逐渐增加你的角度,这样小球就会沿着半径平稳移动。

angle = 0
radius = 87
while angle < 360:
    x = radius*sin(angle)
    y = radius*cos(angle)
    Ball.move(x - Ball.getCenter().getX(), y - Ball.getCenter().getY())
    angle += 0.01

注意:角度 = 360 并不意味着转了一圈,因为数学库默认的角度单位是弧度。如果你想知道,1圈 = 2 * pi,大约是 6.28。

在循环里加上 time.sleep() 可以让它以你想要的速度慢下来。

撰写回答