1

私の状況は、親が何らかのグループである形状 (イメージ) を持っているということです。シェイプ、グループ、およびその他の可能な親には、あらゆる種類の位置と変換が含まれる場合があります。グループからシェイプを削除してそのレイヤーに追加すると、すべてをシェイプに再度適用して、画面上で変更がないように見せる簡単な方法はありますか?

私が行ったことは、getAbsolutePosition を使用して位置を保持することですが、回転などの変換も従う必要があります。ドキュメントでは、getAbsoluteTransform と表示されていますが、その変換を形状に適用することについては何も表示されません。

4

2 に答える 2

-2

グループからノードを削除してもよろしいですか? 関数を使用して非表示にする方がよい場合があり.hide()ます。

例については、 jsfiddleを参照してください。

いずれにせよ、 を使用しない限り、形状はデータ、外観、および変換を保持します.destroy()削除されたノードまたは非表示のノードにアクセスする方法を見つけ出す必要があります。

hideを使用することにした場合:

var yodaImg = new Kinetic.Image({
      x: 0,
      y: 0,
      image: images.yoda,
      width: 93,
      height: 104,
      name: 'image',
      id: 'yoda'
  });

document.getElementById('a').addEventListener('click', function() {
    var yoda = layer.get('#yoda')[0];
    (yoda.isVisible()) ? yoda.hide() : yoda.show();
    layer.draw();
});

IDまたは名前を使用して問題のノードを再選択し、 を使用.show()してイメージを元の場所に正確に再表示できます。

削除することにした場合:

ステージ初期:

var secretLayer = new Kinetic.Layer();
stage.add(secretLayer);
secretLayer.hide();

画像を新しい非表示の secretLayer に削除 (または移動) します。

document.getElementById('a2').addEventListener('click', function() {
    var yoda = layer.get('#yoda')[0];
    var yoda2 = secretLayer.get('#yoda')[0];
    if (typeof yoda != 'undefined') yoda.moveTo(secretLayer);
    if (typeof yoda2 != 'undefined') yoda2.moveTo(yodaGroup);
    layer.draw();
});

secretLayer特定のレイヤーからオブジェクトを削除するための媒体として機能しますが、それでも.get() Kinetic.Container#getを使用する便利な機能を提供します

オブジェクトを削除/移動して非表示にするためだけに別のレイヤーを使用したくない場合は、独自のデータ構造を使用して削除されたノードにアクセスする必要があります。それらを削除して配列に追加し、後で呼び出したいときにアクセスするようなものです。

どちらの方法でも、ノードは変換されるまで保持されますdestroy()

于 2013-08-16T13:43:17.340 に答える