思路一:
1.使用相应格式的动图解析库解析为每帧图像;
2.设置定时器或使用解析库中提供的方法(如apng-js中的play方法)实现每帧图像的更新;
3.通过CallbackProperty动态更新Billboard的image属性;
缺点:解析库少;apng-js解析的每帧图像可能大小不同,导致异常的动态效果;
思路二:
1. 添加两个canvas绘制动图
2.通过CallbackProperty动态更新Billboard的image属性,从两个canvas之间不断切换;
缺点:动图绘制在canvas上的长宽要额外调整;
另辟蹊径:使用单帧序列图片模拟动图效果。定时器+CallbackProperty。优点是可以手动调节每帧图像的间隔时间,图像大小也通过Billboard的width和height直接控制。缺点是:不是直接对动图本身操作,而是以静图模拟动图。
//预缓存图片
const res_urls = await _load_png_urls(urls);
//设置定时器
const interval = 100 //ms
let i = 0;
const timer = self.setInterval(() => {
++i;
i = i % res_urls.length;
},interval || 100);
//设置图像
billboard.image = new CallbackProperty(function () {
return res_urls[i];
}, false);