В KineticJS я хотел бы добавить фигуру к слою и перерисовать только последнюю добавленную фигуру, а не все фигуры в этом слое. Это возможно? Или, может быть, какой-то обходной путь?
(функция .draw() перерисовывает все дочерние узлы слоя)
Подробнее о моей ситуации:
У меня есть слой, на котором я хочу нарисовать линию, которая отслеживает движение фигуры по экрану во время анимации.
//create my shapes first
var myShape = new Kinetic.Circle({config});
//myShape gets its own layer, shapeLayer
var traceLine= new Kinetic.Line({x: myShape.getX() , y: myShape.getY()});
//traceLine gets its own layer, traceLayer
Во время анимации я выполняю этот код для обновления и перерисовки линии:
//during animation loop
var points = traceLine.getPoints();
points.push({x: myShape.getX() , y: myShape.getY()});
traceLine.setPoints(points); // this is currently the most efficient method I can think of
traceLayer.draw(); // redraw the line
shapeLayer.draw(); // the shape gets redrawn as well
Это хорошо работает на короткое время, но со временем я получаю большой массив точек, и время перерисовки линии становится больше.
Что я хотел бы сделать, так это нарисовать новую линию на слое во время каждого цикла анимации, сделав ее сегментированной. Вот так:
var traceLine= new Kinetic.Line({x: myShape.getX() , y: myShape.getY(), x: myShape.getX()+1, y: myShape.getY()+1}); // draw as a point
traceLayer.add(traceLine);
traceLayer.draw(); //this slows it down as all lines get redrawn.
Но функция .draw() перерисовывает все дочерние узлы слоя, что ничуть не эффективнее и не быстрее.
Извините, я не добавил jsfiddle, потому что мой код очень длинный, но если вам нужна дополнительная информация, просто дайте мне знать.