仅在paper.js中重新渲染一层

时间:2018-08-05 23:10:51

标签: paperjs

是否有一种方法可以在paper.js中重新渲染单个图层?我知道您可以重新渲染整个场景,但是具有数千种形状的画布将始终影响性能,因此仅在图层上进行渲染是理想的。

3 个答案:

答案 0 :(得分:2)

不幸的是,没有办法做到这一点。

我建议您使用位图缓存:将所有形状(图层)保存在栅格中,然后绘制此栅格而不是图层(仅隐藏图层)。如果形状发生任何变化,则必须删除栅格并重新绘制所有内容。

对于真正特殊的情况,可能还有其他方法可以实现此目的。

另一种方法是使用webgl进行渲染,但是在webgl中绘制粗线非常复杂。

答案 1 :(得分:2)

您可以模拟将每个图层模拟为不同的PaperScope

由于每个PaperScope都与特定的<canvas>元素相关联,因此更改一个范围(在您的情况下为图层)将仅导致其相应的画布被更新。

请记住,如果您最终遵循此方法,则必须先手动paperScope.activate()使用范围,因为paperJS在范围激活方面趋于“神奇”。

答案 2 :(得分:1)

您可以将不想渲染的图层上的可见参数设置为false。然后draw()并将visible设置回true。它大大提高了性能! ;-)

var tNow=(new Date()).getTime();

paper.project.layers[1].visible =false;
paper.view.draw();
paper.project.layers[1].visible = true;

console.log('Rendertime: '+((new Date()).getTime()-tNow));