0

この質問は、私が以前にここで尋ねた質問に関連しています。現在、KineticJS 4.0.5を使用しており、複数のレイヤーを使用して、さまざまなプロパティを持ついくつかの形状を表示しています。レイヤーのコンテンツを頻繁に変更する必要があるため、removeChildrenを使用してレイヤーのコンテンツを削除していますが、removeChildrenは子に関連付けられたイベントも削除するようです。レイヤーの子を再度レイヤーに追加する必要がある場合があるため、イベントを削除せずにレイヤーの子を削除したいと思います。

removeChildren関数を使用する代わりに、layer.childrens属性を空の配列と等しく設定しようとしました。最初はうまくいったように見えましたが、場合によっては、いくつかの奇妙なことが起こります:/いくつかの形状が消え、それらを元に戻す唯一の方法は、Zインデックスを設定することです。このアプローチの主な問題は、コンテンツがレイヤーから削除されたときにリセットする必要があるいくつかのプロパティに関連していると思いますが、それらがどれであるかはわかりません。

また、描画する前に各図形にイベントを再度設定しようとしましたが、機能しません...画面上で静的なままです...イベントは、描画する前にすべての図形でsetDraggable(true)を使用しようとしましたが、運...以前に使用した形状でレイヤーを再描画するたびに、オブジェクトを再度作成してイベントを再度適用する必要がありますか?または、アプリケーションの各画面のレイヤーを保存するのは良いアプローチですか?(私は多くの異なる画面を持つことができ、その結果、多くのレイヤーが作成され、一度に1つしか表示されません...)

この問題の解決策を知っているなら、教えてください。私のプロジェクトが描画および再描画できることが非常に重要であるため、この問題を解決する必要があります:/

ありがとうございました!

4

1 に答える 1

1

必要なのは、レイヤーからオブジェクトを視覚的に削除する方法ですが、実際には削除しない方法だと思います。removeを使用する代わりに、ストレージ専用の新しいレイヤーを作成してみてください。このレイヤーでは、そのレイヤー内のメイングループが非表示になっています。このグループとそのレイヤーは、簡単にアクセスできるようにグローバルにする必要があります。次に、オブジェクトをビューから削除する必要がある場合は、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 に答える