Javascript KineticJS,我能重新画一个形状吗?(在画布上绘制)

Javascript KineticJS,我能重新画一个形状吗?(在画布上绘制),javascript,animation,canvas,kineticjs,Javascript,Animation,Canvas,Kineticjs,在KineticJS中,我想向层中添加一个形状,并且只重新绘制最近添加的形状,而不是该层中的所有形状。这可能吗?或者是一些变通办法 (.draw()函数重绘图层上的所有子节点) 关于我的情况的更多详情: 我有一个图层,我想在上面画一条线,在动画中跟踪形状在屏幕上的移动 //create my shapes first var myShape = new Kinetic.Circle({config}); //myShape gets its own la

在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()函数会重新绘制层上的所有子节点,这并不是更有效或更快


很抱歉,我没有提供JSFIDLE,因为我的代码很长,但是如果您需要更多详细信息,请告诉我。

这个问题与不想删除屏幕上以前的任何对象,但不想重新绘制任何对象有关,基本上只需绘制一个新项目并显示图层。我通过直接在图层上绘图解决了这个问题

 var traceLayerDraw = traceLayer.getCanvas();
 var context = traceLayerDraw.getContext('2d'); 
 context.beginPath();
 context.moveTo(xBefore, yBefore);
 context.lineTo(newX, newY);
 context.stroke();
所以我只是拿了一个图层,用我想在一个新位置绘制的对象的前后值来绘制它

我还必须将层设置为“clearBeforDraw:false”,作为层的属性

 var traceLayerDraw = traceLayer.getCanvas();
 var context = traceLayerDraw.getContext('2d'); 
 context.beginPath();
 context.moveTo(xBefore, yBefore);
 context.lineTo(newX, newY);
 context.stroke();