在 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,因为我的代码很长,但是如果您需要更多详细信息,请告诉我。