独特识别KineticJS形状

时间:2014-02-14 20:29:42

标签: javascript kineticjs

我有一个循环来查看给定的形状是否与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;
}

1 个答案:

答案 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];