改变Kinetic组儿童阵列

时间:2013-09-14 01:27:13

标签: javascript kineticjs

直接前进:如何更改数组中Kinetic.Group子项的位置?我可以改变阵列和每个孩子的位置对我来说非常重要。

我尝试在特定位置添加一个带有Array.splice的子项,但库崩溃了。所以我坚持使用本地.add()函数,从数组末尾接过子进程,然后将其拼接到第一位:

mapTilesContainer.add(image);
var tempChild = mapTilesContainer.children[mapTilesContainer.children.length - 1];
// delete it from the last place
mapTilesContainer.children.splice(mapTilesContainer.children.length - 1, 1);
// add it to the first place
mapTilesContainer.children.splice(0, 0, tempChild);

以某种方式起作用,但如果我想要定期用.destroy()摧毁一个孩子,它会再次崩溃:

mapTilesContainer.children[8].destroy();

告诉我:未捕获的TypeError:无法在kinetic.js中调用未定义的方法'getLayer':2

添加和销毁而不会搞乱拼接工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

---非常罕见的要求---

您的代码中是否没有解决方法而不是搞乱kinetic的内部数组?

混淆库脚本的内部几乎总是一个坏主意

话虽如此,我快速浏览了kinetic的Container.js代码。

https://github.com/ericdrowell/KineticJS/blob/master/src/Container.js

这是内部添加子方法:

add: function(child) {
    var children = this.children;
    this._validateAdd(child);
    child.index = children.length;
    child.parent = this;
    children.push(child);
    this._fire('add', {
        child: child
    });
    // chainable
    return this;
},

请注意,child.index属性设置为子项数组中子项的位置。

正确地重置每个child.index可能是你操纵Kinetic儿童阵列的关键。

在Container.js的第237行是这个内部方法:

_setChildrenIndices: function() {
    var children = this.children, len = children.length;
    for(var n = 0; n < len; n++) {
        children[n].index = n;
    }
},

kinetic可以使用此方法来重置子数组的索引。

如果您对子阵列进行随机播放,然后执行您自己的_setChildrenIndex版本,则可能不会炸毁您自己的应用。

<强>再次:

混淆库脚本的内部几乎总是一个坏主意