• ベストアンサー

外部swfの特定mcの色を変えるには?

色を選ぶボタンが複数あり色を選択後、 外部swfを読み込むボタンを押し、 外部swf内の特定のmcの色を選択色に変えるにはどうすればよろしいでしょうか?

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

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

色を変えるムービークリップが何フレーム目で登場するかや、色を変えるタイミングが最初の1回だけでいいのか、それとも色を選択するボタンが押される度に変えるのかによって、スクリプトは変わってきます。 ムービークリップの色を変えるには、Color クラス( Flash MX 以前はオブジェクト)の setRGB か setTransform を利用します。 基本的な考え方としては、_root に変数を1つ用意して色のRGB値を保存しておき、これを元に色を変えてはいかがでしょう。 swf ファイルをムービークリップに読み込むと、ムービーが持っていたムービークリップやボタンなどは、全て、読み込みの受け皿になったムービークリップの子になります。 例えば、メインのムービー”Main.swf”のステージに読み込み用のムービークリップ”load_area”があり、ここに swf ファイルを読み込むとします。 外部のムービー”Sub.swf”にある、色を変えたいムービークリップのインスタンス名が”clip”だとすると、これを load_area に読み込んだ時は  _root   ┗ load_area     ┗ clip このような階層構造になります。 ムービークリップに設定する色のRGB値を保存しておく変数は、_root、つまり Main.swf のメインのタイムラインに用意します。 仮に rgb という名前の変数だとすると、Sub.swf にある clip からは、この変数は  _root.rgb として参照できます。 Sub.swf の clip を、最初から指定の色にするスクリプトは、次のようになります。 このスクリプトは、色を変えるムービークリップのインスタンス”clip”に設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  onClipEvent(load)  {   //Colorオブジェクトを生成   clr = new Color( this );   //指定の色に変える   clr.setRGB( _root.rgb );  } load は、ムービークリップがステージに登場した時に1度だけ発生するイベントです。 つまり、このイベントを利用して色を変えるスクリプトを実行すると、最初から指定の色に変わります。 変数 rgb は Sub.swf のタイムラインにはありませんから、undefined (未定義)になっています。 そのため、Sub.swf 単体で動作確認した時は setRGB に 0 が渡され、clip は黒(RGB値でいうと 0x000000 )になります。 Main.swf のメインのタイムラインには、変数 rgb を用意しておきます。  //ムービークリップのRGB値を保持  //デフォルトは赤  rgb = 0xFF0000; この初期化をしないと、rgb という変数は、最初は存在しないことになります。 色を選ぶ前に読み込みボタンが押された場合は、先の Sub.swf 単体で再生した時と同じ理由により、clip は黒になります。 黒になっては困るのでしたら、予め、明示的に初期値を入れておくようにしましょう。スクリプトとしても、より安全な設計になります。 色を選択する各ボタンには、変数 rgb にRGB値を入れるスクリプトを設定します。  on(release)  {   //色を青に設定する   rgb = 0x0000FF;  } 選択される度にムービークリップの色を変えたい場合は、Color オブジェクトを Main.swf の方にも作って、  on(release)  {   //色を青に設定する   rgb = 0x0000FF;   //色を変える   col = new Color( load_area.clip );   col.setRGB( rgb );  } とすれば、ボタンをクリックした時に色が変わるようになります。 要するに、色の成分を伝える変数と Color オブジェクトで制御するムービークリップのターゲットパスにさえ気をつければ、どちらのムービーからでも色を設定できるということです。 色を選択するボタンをボタンシンボルではなくムービークリップで作っている場合は、色を選択するボタン自身も1つの階層になります。rgb や load_area を参照する時は、親の階層を指す _parent を付けて指定してください。 setRGB は、線や塗りに関係なく、指定の色1色でムービークリップを塗りつぶす命令(メソッドといいます)です。 色を変えるには、もう1つ、setTransform というメソッドもあります。こちらは、例えば赤の成分を少し強くするなど、色調補正に近いことができます。 ステージにあるムービークリップやボタンを選んで「プロパティ」パネルを見ると、「カラー:」のリストの中に”着色”と”詳細”( MX では”高度な設定”)という項目があります。 ”着色”に相当するものが setRGB 、”詳細”にあたるものが setTransform です。 setTransform は必要なパラメータが多いので、汎用型である Object 型の変数に必要なパラメータをまとめ、メソッドには一括して渡せるように設計されています。 setRGB と setTransform は、メソッドに渡すパラメータが違うだけです。setTransform を使う場合でも、同じ要領で、他のムービーにあるムービークリップに色の情報を伝えたり、色を操作することができます。 長くなってすみませんでした。 不明な点がありましたら、補足してください。

SUGSUG
質問者

お礼

DPEさん 丁寧にお答えいただいてありがとうございます。 無事できました!_rootに保持したものを外部swfが読めばよかったのですね。 最初”load_area”に指定色設定、外部swfに反映する形で作っていたのですが、読み込みごとに色を選択しなおさないといけなかったので、指示の組み立て方とても勉強になりました。ありがとうございました。

関連するQ&A