0

这个问题与我之前在这里问过的一个问题有关。我目前正在使用 KineticJS 4.0.5,并且正在使用多个图层来显示一些具有不同属性的形状。由于我需要经常更改图层内容,因此我使用 removeChildren 来删除图层内容,但似乎 removeChildren 也会删除与儿童相关的事件。我想在不删除其事件的情况下删除子图层,因为我可能必须再次将它们添加到图层中。

我试图将 layer.childrens 属性设置为一个空数组,而不是使用 removeChildren 函数。起初它似乎有效,但在某些情况下,会发生一些奇怪的事情:/ 一些形状消失了,让它们恢复的唯一方法是设置它们的 Z 索引。我认为这种方法的主要问题与从图层中删除内容时必须重置的某些属性有关,但我不知道它们是哪些。

我还尝试在绘制它们之前再次在每个形状上设置事件,但它不起作用......它们在屏幕上保持静态......我尝试在绘制它们之前对所有形状使用 setDraggable(true) 但没有运气...每次我想用以前使用的形状重绘图层时,是否需要再次创建对象并将事件再次应用到它们?还是在我的应用程序上为每个屏幕存储图层是一种好方法?(我可以有很多不同的屏幕,这会导致很多层,一次只能显示一个......)

如果您知道此问题的解决方案,请告诉我。我真的需要解决这个问题,因为我的项目能够绘制和重绘非常重要:/

谢谢!

4

1 回答 1

1

在我看来,您需要的是一种从图层中直观地删除对象的方法,但实际上并不删除它们。尝试创建一个专门用于存储的新层,而不是使用删除,在该层中隐藏您的主要组。您将希望该组及其层成为全局变量以便于访问。然后,当您需要从视图中移除对象时,使用 moveTo 将其移动到存储中,然后再次使用 moveTo 将其恢复到视图中。

var gObj = {storage : '', storageGroup : ''};
gObj.storage = new Kinetic.Layer();
gObj.storageGroup = new Kinetic.Group({name:'storage', x:0, y:0});
gObj.storage.add(gObj.storageGroup);
// assumes stage is already built
stage.add(gObj.storage);
gObj.storageGroup.hide();
function wareHouse(obj, group, store) {
    // obj is an object to store when store === true, otherwise it's a name or id when retreiving, group is the group where object either is or needs to be, store is a boolean value
    if (store) {
        obj.moveTo(gObj.storageGroup);
    } else {
        // change the dot to pound ('.' = '#') if using id's
        var box = gObj.storageGroup.get('.' + obj)[0];
        box.moveTo(group);
    }
    var parent = group.getLayer();
    parent.draw();
}
于 2012-11-15T13:55:50.497 回答