- ベストアンサー
外部swfの特定mcの色を変えるには?
色を選ぶボタンが複数あり色を選択後、 外部swfを読み込むボタンを押し、 外部swf内の特定のmcの色を選択色に変えるにはどうすればよろしいでしょうか?
- みんなの回答 (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 を使う場合でも、同じ要領で、他のムービーにあるムービークリップに色の情報を伝えたり、色を操作することができます。 長くなってすみませんでした。 不明な点がありましたら、補足してください。
お礼
DPEさん 丁寧にお答えいただいてありがとうございます。 無事できました!_rootに保持したものを外部swfが読めばよかったのですね。 最初”load_area”に指定色設定、外部swfに反映する形で作っていたのですが、読み込みごとに色を選択しなおさないといけなかったので、指示の組み立て方とても勉強になりました。ありがとうございました。