直接前进:如何更改数组中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
添加和销毁而不会搞乱拼接工作。有什么想法吗?
答案 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
版本,则可能不会炸毁您自己的应用。
<强>再次:强>
混淆库脚本的内部几乎总是一个坏主意