PaperJS SymbolItems 在命中结果搜索后丢失属性
PaperJS SymbolItems lose properties after hit result search
我正在为一个圆创建一个 SymbolDefinition
,并使用 new SymbolItem(definition)
将其放置在 canvas 上。用于创建定义的圆形对象具有默认位置 (0,0)、默认颜色,并且没有其他信息,因为默认纸张设置。
当我实例化符号并将其放置在某个位置时(例如 (20,30)),我还会在其数据中附加一些其他信息,例如名称、一些补充信息 属性,等
如果我点击放置的圆圈,并使用project#hitResultAll
对该项目进行回调搜索,则命中结果中包含的项目不再具有上述任何信息。事实上,它似乎是用于创建定义的原始圆形对象;它的位置实际上是(0,0),它没有名字,数据属性是空的。
这是一个 jsFiddle with an example(打开开发控制台以查看输出)。
如果 link 不起作用,这里是示例代码:
var canvas = paper.createCanvas(100, 100);
document.getElementById("canvasDiv").appendChild(canvas);
paper.setup(canvas);
var circle = paper.Path.Circle([0,0], 10);
circle.fillColor = 'red';
var definition = new paper.SymbolDefinition(circle);
var tool = new paper.Tool();
tool.onMouseUp = function(event){
var hitResult = paper.project.hitTestAll(event.point);
if(hitResult.length > 0){
var result = hitResult[0];
var item = result.item;
console.log("Item name should be 'Bob', but is actually " + item.name);
// Output is: Item name should be 'Bob', but is actually null
}
};
var actualCircle = new paper.SymbolItem(definition);
actualCircle.position = [20,30];
actualCircle.name = 'Bob';
console.log("Symbol Item was created with the name " + actualCircle.name);
// Output is: Symbol Item was created with the name Bob
有谁知道为什么会这样,我该如何解决?
原来是paperJS命中测试代码的bug。感谢Lehni,这个问题已经解决了。截至发稿时post,尚未部署新版本,但只要您使用 0.10.2 以上的任何版本,就应该是安全的。
根据 Lehni 的说法,如果您受困于旧版本:
If you use hitTest() instead of hitTestAll(), it returns the expected result.
我正在为一个圆创建一个 SymbolDefinition
,并使用 new SymbolItem(definition)
将其放置在 canvas 上。用于创建定义的圆形对象具有默认位置 (0,0)、默认颜色,并且没有其他信息,因为默认纸张设置。
当我实例化符号并将其放置在某个位置时(例如 (20,30)),我还会在其数据中附加一些其他信息,例如名称、一些补充信息 属性,等
如果我点击放置的圆圈,并使用project#hitResultAll
对该项目进行回调搜索,则命中结果中包含的项目不再具有上述任何信息。事实上,它似乎是用于创建定义的原始圆形对象;它的位置实际上是(0,0),它没有名字,数据属性是空的。
这是一个 jsFiddle with an example(打开开发控制台以查看输出)。
如果 link 不起作用,这里是示例代码:
var canvas = paper.createCanvas(100, 100);
document.getElementById("canvasDiv").appendChild(canvas);
paper.setup(canvas);
var circle = paper.Path.Circle([0,0], 10);
circle.fillColor = 'red';
var definition = new paper.SymbolDefinition(circle);
var tool = new paper.Tool();
tool.onMouseUp = function(event){
var hitResult = paper.project.hitTestAll(event.point);
if(hitResult.length > 0){
var result = hitResult[0];
var item = result.item;
console.log("Item name should be 'Bob', but is actually " + item.name);
// Output is: Item name should be 'Bob', but is actually null
}
};
var actualCircle = new paper.SymbolItem(definition);
actualCircle.position = [20,30];
actualCircle.name = 'Bob';
console.log("Symbol Item was created with the name " + actualCircle.name);
// Output is: Symbol Item was created with the name Bob
有谁知道为什么会这样,我该如何解决?
原来是paperJS命中测试代码的bug。感谢Lehni,这个问题已经解决了。截至发稿时post,尚未部署新版本,但只要您使用 0.10.2 以上的任何版本,就应该是安全的。
根据 Lehni 的说法,如果您受困于旧版本:
If you use hitTest() instead of hitTestAll(), it returns the expected result.