我基本上想要创建一个新的路径,将画布globalCompositeOperation设置为'destination-out'。这可能吗?如果是这样,怎么样?
我注意到Item有一个blendMode属性:http://paperjs.org/reference/item#blendmode,但尝试不同的值并不能提供所需的效果。
答案 0 :(得分:2)
根据您最近的评论,您需要创建图层,如下所述:
http://paperjs.org/tutorials/project-items/project-hierarchy/#removing-items-and-children
然后您可以将路径添加到图层并执行以下操作:
//add image to project as background
// ... your code here ...
var secondLayer = new Layer();
无论何时创建新图层,它都会成为项目的活动图层,然后您可以在第二层上绘制所有图层。
如果您想要一个简单的“撤消”按钮,您可以这样做:
function onMouseDown(event) {
if (window.mode == "drawing") {
myPath = new Path();
myPath.strokeColor = 'black';
}
else if (window.mode == "undo") {
myPath.opacity = '0'; //this makes the last path used completely see through
// or myPath.remove(); // this removes the path.
//if you're intent on something that writes and erases, you could do
}
}
但你要找的是这样的:
function onMouseDrag(event) {
if (window.mode == "drawing") {
myPath.add(event.point);
}
else if (window.mode == "erasing") {
myPath.removeSegment(0);
}
}
这会从头到尾擦除路径的各个部分。对于完整功能,您需要一些标识点击路径的内容(layer.getChildren()?然后选择子项)。然后使用鼠标移动点,您需要识别段索引并使用.removeSegment(index)将其从路径中删除。
答案 1 :(得分:1)
嗯,简单的解决方案就是创建一个白色的路径。 http://jsfiddle.net/D8vMG/11/
function onMouseDown(event) {
if (window.mode == "drawing") {
myPath = new Path();
myPath.strokeColor = 'black';
}
else if (window.mode == "erasing") {
myPath = new Path();
myPath.strokeColor = 'white';
myPath.strokeWidth = 10;
}
}