В качестве эксперимента я хочу оживить квадрат с классом Tween и сохранить все фреймы в виде png файлов, однако надлежащего обратного вызова, такого как onUpdate
, похоже, не существует. Я хотел бы назвать его на каждом новом фрейме и сгенерировать png текущего состояния с помощью функции, которую я уже создал, или с помощью другого решения.
Код, приведенный ниже, основан на примере, который я нашел в этом репозитории на Github.
let i = 0;
let tween = new Konva.Tween({
node: rect,
duration: 1,
x: 140,
y: 90,
rotation: Math.PI * 2,
opacity: 1,
strokeWidth: 6,
scaleX: 1.5,
onUpdate: () => { // does not exist
i++;
console.log(i);
render_frame(i);
},
onFinish: () => {
console.log("finished");
}
});
tween.play();
Нет обратного вызова onUpdate
, но мы можем использовать событие draw
для слоя, чтобы сохранить изображение:
let tween = new Konva.Tween({
node: circle,
duration: 1,
x: 140,
y: 90,
rotation: Math.PI * 2,
opacity: 1,
strokeWidth: 6,
scaleX: 1.5,
onFinish: () => {
// remove draw event
console.log('finish');
layer.off('.tween');
}
});
tween.play();
layer.on('draw.tween', () => {
// save layer to image
console.log('to image')
})
https://jsbin.com/regiduzusi/1/edit?html,js,console,output
Обновить:
Если вам нужны синхронные обновления, вы можете вручную изменить время движения.
const duration = 1;
const tween = new Konva.Tween({
node: circle,
duration: duration,
x: 140,
y: 90,
rotation: Math.PI * 2,
opacity: 1,
strokeWidth: 6,
scaleX: 1.5
});
const FPS = 25;
const tics = FPS * duration;
for (let i = 0; i < tics; i++) {
tween.seek(i / tics);
layer.draw();
console.log('to image')
}
Демонстрация 2: https://jsbin.com/fudanozani/1/edit?html,js,console,output