actionscript 3 プロジェクトで表示リストを管理するための適切な方法について提案がある人はいますか? 私は現在アプリケーションを構築しており、表示する必要があるすべてのモジュールを追跡し、それらを並べ替えるのが面倒です。swfs、イメージ、およびビデオもロードする swfs とインスタンス化されたクラスをロードしました。すべてをステージに参照するだけでよいですか? 表示ツリーを追跡するにはどうすればよいですか? 特定のモジュールを常にツリーの一番上に配置するにはどうすればよいですか?
3 に答える
私はコンテナDisplayObjectsを使用し、各DisplayObjectに直接の子を管理させます(親は子に何をすべきかを指示します)。通常、ディスプレイリストを独自のコンテナに含めることができる自然な「レイヤー」に分割できます。
このように、メインコンテナは深さを変更する必要がないため、ステージに追加された最後のコンテナが一番上になることがわかります。
また、DisplayObjectをディスプレイリストの一番上に強制するには、addChildを使用します(すでに追加されている場合でも)。これにより、リストの一番上に追加されます。
前述のようにコンテナを使用するのが最善の方法です。コンテナはあなたの友達です。
addChild() を使用して何かをリストの一番上に強制することは機能しますが、コード全体で 50,000 回実行する必要がある場合は疲れる可能性があります。何。
そこで私がやっていることは、ドキュメント クラスに「優先度の高いスタック」配列を作成することです。これに、必要なものを常に「一番上に」追加します。主要な表示オブジェクトである「RunDepthStack」というメソッドを使用して、配列をループし、配列内のすべてを再度追加します。
それについて非常にメタ的なことを取得し、必ずしもステージ上にあるとは限らないオブジェクトを配列に追加することもできます。
object.parent.addChild(object);
これにより、コンテナに関係なく、単一のスーパーメソッドで優先順位付けされた表示オブジェクトを管理できます...
非常に複雑な UI を使用している場合は、より細かくする必要がありますが、現時点ではそれが問題になるとは思いません。
アプリケーションが大きい場合は、ユーザーがアプリケーションを操作するときに addChild / removeChild を実行します。
ただし、かなり小さい場合は、単純な目に見える true/false で十分です。
あなたは最初のケースにいるようです。
しかし、はい、間違いなくクラス/オブジェクトをサイトマップとして使用して、ナビゲーションに入力し、モジュール参照を追跡し、ユーザーがどこにいて、ディープリンクに使用できます.
深度スワッピングに関しては、視覚的な深度について話していると思います。これらを実装してください:)
setChildIndex(example,0); // send to back
setChildIndex(example,numChildren - 1); // bring to front
次の間で交換します。
var otherindex = getChildIndex(theotherthing);
その背後に:
setChildIndex(example, otherindex) //pushes the other thing forward
前に:
setChildIndex(example, otherindex + 1);
HTH。