3

私は KineticJS 4.0.5 を使用しており、現在いくつかのレイヤーのコンテンツを描画しようとしていますが、ステージに追加された最後のレイヤーのみが描画されます... ドキュメントを正しく理解していれば、これは可能であるはずです。層?

私は3つの異なるレイヤーを持っています:

  • 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 の inspect 要素で確認しました)、ドキュメントには draw 関数がすべてのレイヤーを描画すると書かれています... ここで何か間違っていますか? それとも無理ですか?それが不可能なら、なぜレイヤーとステージが必要なのですか? 1つで十分ではないでしょうか?

前もって感謝します。

編集:私は問題を解決することができました.cssを使用して白い背景色をキャンバス要素に適用していました.各レイヤーは他のレイヤーの上に新しいキャンバス要素を作成するため、一番上のレイヤーのコンテンツしか見ることができませんでした(この場合ただ白)。

ただし、以前は 1 つのレイヤーではなかった、複数のレイヤーに関連する問題がまだあります。ステージでクリア機能を使用すると、レイヤーがクリアされるはずですよね? しかし、代わりに、レイヤーはまったく同じままです。個々のレイヤーで clear を呼び出そうとしても、レイヤーは変更されません...クリア後にステージドロー機能も使用していますが、まったく変更はありません...今まで見つけた唯一の解決策は、レイヤーをステージから削除して再度追加することでした:sレイヤーの内容をリセットするより良い方法はありますか?

最初の質問で混乱させて申し訳ありません。

4

1 に答える 1

1

Clear は、再描画する前にキャンバスをクリアするためのものです。レイヤーに追加されたオブジェクトは削除されません。したがって、あなたの場合は、削除機能を使用して、レイヤーにアタッチされているオブジェクトを取り出すか、レイヤー全体を削除します。

于 2012-11-11T22:58:03.613 に答える