利用patch制作的对象在animation以及生成Gif文件时显示错误的问题
Problems:
animation制作动画的时候,用patch制作的对象(例如Circle)在背景层,即使设置为返回值来清除,在下一帧更新的时候,上一帧也不会消失,从而造层残影的效果。而且由于图形的利用ax.add_patch()直接添加,没办法单个删除,很让人头痛。
而这一现象在plt.show()的时候,如果animation.FuncAnimation( blit=True) 则不会在预览时出现问题,在保存为gif时候才会暴露。
Solutions:
Method 1:惹不起躲得起法
不使用patch制作Circle等对象,而通过lines在描点连线制作,这种方法比较笨重,想要精确表达图形每一帧都需要大量的点,而在动态时候,点的运动也是一个难题。
Method 2:将错就错法
既然patch制作的对象难以删除,我们可以将错就错,每一帧更新的时候都用一个背景色(白色)的图形盖住上一帧的的图形,从而达到删除的效果。
值得注意的是,白色图形需要比原图形略大一点,以免留下上一帧的边框。
在设定每一帧的返回值的时候,图形名称的排序决定了图层的顺序。利用此方法需要将原白色图形放在这一帧的图形之前。
Conclusions:
目前找到的两个方法都各自存在问题,方法1太笨重,若非迫不得已肯定不会使用。方法2是间接的方法,有点小聪明,但没有直接解决问题,以后还需要继续探索更好的解决方法。
问题处理时长:2天
2019年8月29日
Txing