Zelle图形动画
我正在用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() 可以让它以你想要的速度慢下来。