• ベストアンサー

重ね順を変えたい

http://www.ntv.co.jp/zoomin/profile/index.html このようにFLASHを作りたいのですが重ね順をクリックしたら、重ね順が変わっていますよね どうしたら出来るですか? FLASHmxを使用しています

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

MovieClip オブジェクトが持っている swapDepths という命令(メソッド)で、重ね順を変更できます。 swapDepths はムービークリップインスタンスでなければ使えません。 各ボタンはムービークリップシンボルで作ってください。 Flash では重ね順は深度と呼ばれています。 ムービークリップだけでなく、ボタンやテキスト・描画ツールで描いた絵(シェイプ)などムービー内の全てのオブジェクトには、どれとも重複することのない深度が割り当てられています。 深度は -16384 から 1048575 の数値で表し、大きい数値の深度を割り当てられているものほど上に重なって表示されます。 最も下の -16384 は _root 、つまりムービーそのものが占有します。 ステージにある絵やムービークリップ(いわゆる”オブジェクト”)は、レイヤーの順序や描画または配置した順番・ムービークリップの親子関係をもとに、-16383 から順に固有の深度が割り当てられます。 swapDepths は深度を入れ替えるメソッドです。 特定のムービークリップインスタンスを指定するか、深度を直接指定することで重ね順を入れ替えます。 (ただし、同じ階層に属するもの同士に限ります) 数値で深度を指定した場合、既に他のオブジェクトが占有している深度であればそのオブジェクトと自分の深度が入れ替わります。 どのオブジェクトも占有していない深度を指定すると、自分の深度だけが変更されます。 ステージに配置したものは、先述の通り -16383 から順に深度が割り当てられます。 配置されているオブジェクトの数にもよりますが、一般的にはステージ上のオブジェクトは負の深度を持っていますので、swapDepthsで 0 以上に変更すると一番上になります。 なお、深度は連番になっていなくても構いません。 ------------------------------------------------------------------ ご提示の作品では、マウスのカーソルを重ねると一番上になり、カーソルが外れると元の重ね順に戻ります。 これは、最初に自分に割り当てられた深度を変数に保存しておいて、カーソルが重なった時に深度を一番上に変更し、そしてカーソルが外れた時には保存しておいた元の深度に戻すことで実現できます。 深度を取得するには getDepth というメソッドを使います。 カーソルが重なった / 外れたかどうかを検出するには、rollOver と rollOut イベントを利用します。 スクリプトにしてみますと、大体、次のようになります。 マウス操作により重ね順を変更したいオブジェクトを全てムービークリップシンボルとして作り、同じタイムライン(例えばステージなど)に配置してください。 このスクリプトは、全てのムービークリップのインスタンスに設定してください。 ここでは割愛させていただきますが、インスタンス名を工夫して付けると、for ループと on*** = function という書き方でまとめてスッキリと定義することもできます。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  onClipEvent(load)  {   //最初に割り当てられた深度を保存する   depth = this.getDepth();  }  //ロールオーバーで、最も上に移動する  on(rollOver)  {   this.swapDepths( 0 );  }  //ロールアウトで元に戻す  on(rollOut)  {   this.swapDepths( depth );  } ”一番上にする”とは、要するに、他のどれよりも大きな数値の深度を割り当てればいいわけです。 Flash Player 7 (作成ツールは MX の次世代にあたる Flash MX 2004 )以降ではスクリプトで現在最も上にあたる深度を取得できるのですが、MX ではこのスクリプトは使えませんので、とりあえず 0 を割り当てることで一番上にしています。 attachMovie や createEmptyMovieClip メソッドで他のムービークリップに深度 0 を割り当てているなど、深度 0 が既に占有されている場合は、0 以外で不都合のない数値を指定してください。 正の数であれば、ステージに配置したオブジェクトとの深度の衝突はまず起こりません。

sachi225
質問者

お礼

大変よく分かりました どうもありがとうございました。

関連するQ&A