我有一个循环来查看给定的形状是否与KineticJS程序中的任何其他形状发生碰撞。下面是情况的伪代码
function hasCollision(shape, index) {
var children = layer.children;
for(var i = 0, l = children.length; i < l; i++) {
if(i === index) continue; // Only check other shapes
if(collision(shape, children[i]))
return true;
}
return false;
}
我不喜欢这种方法,我必须在代码中的某个地方保存每个形状的索引。此外,如果我从数组中删除元素,代码将会中断。
我阅读了文档,找不到有关比较形状等的任何信息,但我可能忽略了一些东西。 KineticJS是否已经有办法唯一识别/比较形状实例?如果没有,是否可以将自定义数据附加到节点?它仍然可以用于序列化吗?这样做是否可能会破坏当前或未来版本的KineticJS?
编辑:要明确,这是我正在考虑的解决方案
shape.uid = uid_factory++;
...
function hasCollision(shape) {
var children = layer.children;
for(var i = 0, l = children.length; i < l; i++) {
var other = children[i];
if(other.uid === shape.uid) continue; // Only check other shapes
if(collision(shape, other))
return true;
}
return false;
}
答案 0 :(得分:1)
是
您可以为任何动能节点(形状,文本等)指定唯一ID:
var shape123 = new Kinetic.Circle({
id:(nextShapeId),
...
你可以得到任何节点的id:
anyNode.getId();
您可以让舞台为您提供对该节点的引用,如下所示:
// use stage.find to fetch all nodes with an id == theId
var nodes = stage.find("#"+theId);
// nodes is a collection, so grab the first element
var myNode = nodes[0];