3

我正在使用 KineticJS 4.0.5,我目前正在尝试绘制几层的内容,但只绘制了添加到舞台的最后一层......如果我正确理解了文档,这应该是可能的,否则我们为什么需要一层?

我有三个不同的层:

  • 只有一个 Kinectic.Rect 对象的背景层;
  • 具有多种形状的元素层;
  • 以及一个包含元素的顶层,我希望始终处于一切之上。

我在我创建的对象内的绘制函数中填充这些图层,该对象还具有引用背景的形状属性和包含要添加到元素图层的元素的内容属性。我的绘图功能代码如下:

this.draw = function() {
    var stage = E.game.stage, layers = E.game.layers;

    stage.clear();

    // Add Background
    this.shape.setSize(stage.getWidth(), stage.getHeight());
    layers.background.add(this.shape);

    // Iterate over contents
    for(var i = 0; i < this.contents.length; i++) {
        layers.elements.add(this.contents[i].shape);
    }

    // Draw Everything
    stage.add(layers.background);
    stage.add(layers.elements);
    stage.add(layers.top); // This one is currently empty
    stage.draw();
}

运行此函数后,画布中只绘制了layers.top,如果我注释添加它的行,则只绘制layers.elements。然而舞台有 3 个孩子(我用 chrome 上的检查元素检查了它),并且在文档中它说绘图函数绘制所有图层......我在这里做错了吗?还是不可能?如果不可能,为什么我需要一个层和一个舞台?一个还不够吗?

先感谢您。

编辑:我能够解决问题,我将带有 css 的白色背景颜色应用于画布元素,并且由于每一层都在其他层之上创建了一个新的画布元素,因此我只能看到最顶层的内容(在这种情况下只是白色)。

但是,我仍然有一个与多层相关的问题,而我以前只有一层没有。当我在舞台上使用清除功能时,它应该清除图层对吗?但是相反,图层保持完全相同,即使我尝试在每个单独的图层上调用 clear 它们也不会改变......我也在清除它们后使用舞台绘制功能,但仍然没有任何变化......到目前为止,我发现的唯一解决方案是从舞台上删除图层并再次添加它:s 有没有更好的方法来重置图层内容?

再次感谢您,并对第一个问题的困惑感到抱歉。

4

1 回答 1

1

清除只是在重绘之前清除画布。它不会删除添加到图层的对象。因此,对于您的情况,请使用删除功能取出附加到图层的对象,或者像您正在做的那样,删除整个图层本身。

于 2012-11-11T22:58:03.613 回答