深度の管理 − DepthManager [Edit]

[ライブラリ]にコンポーネントがあるとき、メインタイムライン(_root)の深度はDepthManagerクラスで管理することが考えられます。

[ライブラリ]にコンポーネントがあると、メインタイムライン(_root)ではMovieClip.getNextHighestDepth()メソッドが使えません。UI ComponentsはDepthManagerクラスをロードして、使用可能な最大の深度1048575にMovieClipインスタンスを生成するからです(「意外と使えないMovieClip.getNextHighestDepth()」参照 )。

コンポーネントを使う場合には、DepthManagerクラスのメソッドやプロパティを利用すると、メインタイムライン(_root)の深度も正しく管理することができます。DepthManagerクラスのメソッドに深度の指定としてDepthManager.kTopプロパティ(定数)を用いると、20ずつの間隔を空けた最上位の深度が使用されます。

深度の設定には、DepthManager.setDepthTo()メソッドを使います。引数にDepthManager.kTopを指定すれば、DepthManagerが管理用に作成したMovieClipとは別に、使用可能な最上位の深度にターゲットのインスタンスを設定します。

以下のスクリプト001は、[ライブラリ]にButtonコンポーネントが格納された状態で、新規作成したMovieClipの深度を使用可能な最前面に設定します。テストのため、新規MovieClipインスタンスは、一旦MovieClip.getNextHighestDepth()メソッドの戻り値の深度に作成しています。

スクリプト001■DepthManagerを使った深度設定
// タイムライン: _root
// フレームアクション
// Buttonコンポーネントを[ライブラリ]に格納
// [0]DepthManagerをimport
import mx.managers.DepthManager;
// [1]使用可能な最上位の深度を取得
var nDepth:Number = this.getNextHighestDepth();
trace(nDepth);  // 出力: 1048576
// [2]指定の深度に新規MovieClipインスタンスを作成
var _mc:MovieClip = this.createEmptyMovieClip("my_mc", nDepth);
trace(_mc.getDepth());  // 出力: 1048576
// [3]DepthManagerを使って改めて使用可能な最上位の深度に再設定
_mc.setDepthTo(DepthManager.kTop);
trace(_mc.getDepth());  // 出力: 20

コンポーネントインスタンスを作成する場合には、DepthManager. createClassChildAtDepth()メソッドを使用します。引数には、やはり深度を指定するプロパティ(定数)を渡します。指定できるプロパティ(整数)値については、オンラインヘルプのDepthManager.createClassChildAtDepth()メソッドおよび各プロパティの説明をご参照ください。

以下のスクリプト002を上記001の後に追加すると、Buttonコンポーネントインスタンスが、使用可能な最前面の深度に作成されます[*1]

スクリプト002■DepthManagerを使ったコンポーネントインスタンスの作成
var myButton:mx.core.UIObject =
  this.createClassChildAtDepth(mx.controls.Button, DepthManager.kTop);
trace(myButton.getDepth());  // 出力: 40
_____
[*1] さらに以下のスクリプト003を加えると、メインタイムラインに作成されたMovieClipとその深度が確認できます。

スクリプト003■サンプルスクリプトで作成された全MovieClipの確認
delete _mc;
delete myButton;
for (var prop in this) {
  var obj:Object = this[prop];
  if (typeof obj == "movieclip") {
    trace([obj, obj.getDepth()]);
  }
}
// [出力]:
_level0.reserved,1048575
_level0.focusManager,1048574
_level0.depthChild0,40
_level0.my_mc,20

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事