我写了一个matplotlib动画程序,如下所示:
def animate(frame):
observation = env.render()
action = RL.choose_action(str(observation)) # TODO
action = [random.randint(0, 4) for i in range(ROBOT_NUM)] # TO BE DELETE TODO
env.step(action)
observation_ = env.render()
reward = env.reward
RL.learn(str(observation), action, reward, str(observation_)) # TODO
for i in range(TARGET_NUM):
patchs_target[i].center = (env.targets[i].x, env.targets[i].y)
for i in range(ROBOT_NUM):
patchs[i].center = (env.robots[i].x, env.robots[i].y)
patchs_inner[i].center = (env.robots[i].x, env.robots[i].y)
return patchs + patchs_inner + patchs_target
.....
anim = animation.FuncAnimation(fig, animate, init_func=init,frames=1, interval=UPDATE_INTERVAL, blit=True)
现在我想通过判断animate
函数中的一个条件来停止animation.FuncAnimation
。例如if reward < 10
然后停止animation.FuncAnimation
,但我不知道如何处理它。
或者是否有任何方法可以通过条件停止animation.FuncAnimation
?而不是通过动画时间。
2条答案
按热度按时间k4aesqcs1#
两个选择:
(1)使用生成器
为了动态地控制动画,你可以使用一个生成器,只要满足某些条件,它就会在while循环中产生新的值。这可能看起来如下:
(2)使用一个类
event_source.stop()
。或者,你可以用
anim.event_source.stop()
停止动画。为了在animating函数中访问动画,你可以使用一个类,并使动画成为一个类变量。请注意,这两个代码都是未经测试的,因为问题没有提供测试用例。
f5emj3cl2#
我遇到了同样的问题,我尝试在线程中运行FuncAnimation。此外,通过检查退出标志(从主线程设置)关闭animate函数中的图形,我能够停止动画。