• ベストアンサー

外部画像をMCの真ん中に表示する。

htmlから変数をもらって外部テキストと画像を表示させています。 自分でもいろいろ探したのですが、 ステージの真ん中にもっていくことや、画像のサイズを合わせることは出来たのですが jpgを読み込むmcの真ん中に表示することに関しては探しきれませんでした。 抜きの画像でバックは透明、高さは合わせられるのですが幅は無理なのです。 どなたかご存知の方教えて頂けないでしょうか? おそらく、onClipEvent (load)で指定するのだろうと考えてはいるのですが・・・。 宜しくお願いします。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

外部画像をMCの真ん中に表示するというのは次のようなことですか?  MC↓  □□□□□□□□□□  □□□□□□□□□□  □□□□□□□□□□  □□□□□□□□□□  □□□□□□□□□□  外部画像(JPEG)↓  ■■■■■■  ■■■■■■  ■■■■■■  外部画像をMCの真ん中に表示↓  □□□□□□□□□□  □□■■■■■■□□  □□■■■■■■□□  □□■■■■■■□□  □□□□□□□□□□ これだと, 少なくとももう1つムービークリップが必要です。 外部画像を表示するムービークリップを 親と子の入れ子二重構造にして, 子ムービークリップに画像をロードして, 親ムービークリップの真ん中に持ってくるという方法です。 この方法を使うとしても, さらにいくつかの手段がありますが, どの手段を使えば良いかは作者やバージョンによって変わります。 ◎手段1 ================== Flash MX 2004 以上(MX2004,8,CS3)をお持ちで, 楽に済ませるなら次のようにすれば良いと思います。 新規ドキュメントを作成し, まずステージ上に外部JPEGより大きな塗りの長方形を矩形ツールで描きます。 塗りの色が不要である場合は透明な色の塗りの長方形を描きます。 その塗りの長方形を選択して, 「シンボルに変換」でムービークリップに変換するのですが, このとき「基準点」に注意して変換します。 「基準点」を 「中央(縦横とも真ん中)」 にして「OK」します。 そして, そのムービークリップを選択して,インスタンス名を付けます。 一応 「oya_mc」 というインスタンス名を付けたとしておきます。 次に, _root のレイヤーを1つ追加して, その新しいレイヤーのフレーム1に次のようなスクリプトを書きます。 --------------------------------------- // 親の中に子ムービークリップ「ko_mc」を作成 _root.oya_mc.createEmptyMovieClip("ko_mc", 0); // MovieClipLoaderクラスのインスタンス MCL を作成 MCL = new MovieClipLoader(); // ロード監視用のインスタンス OBJ を作成 OBJ = new Object(); // 画像がロードされたときの動作を定義 OBJ.onLoadInit = function(myTarget) { myTarget._x = -myTarget._width/2; myTarget._y = -myTarget._height/2; }; // MCLのリスナーオブジェクトとしてOBJを登録 MCL.addListener(OBJ); // gaibu.jpg を 子ムービークリップ にロード MCL.loadClip("gaibu.jpg", _root.oya_mc.ko_mc); --------------------------------------- これで出来上がりです。 外部画像「gaibu.jpg」をSWFと同じフォルダにでも保存すれば, 自動的に「gaibu.jpg」が「oya_mc」の真ん中に表示されるものができます。 ◎手段2 ================== > おそらく、onClipEvent (load)で指定するのだろうと > 考えてはいるのですが・・・。 それで行きますか? その場合はActionScriptは簡単になりますが, 手動で作成する部分が増えて, さらにActionScriptを書く場所が少なくとも2箇所以上に分散しています。 この方法も書いておきますと, 上の ◎手段1 で書いたように, 塗りの長方形を「基準点」を 「中央(縦横とも真ん中)」 にしてムービークリップに変換し, 「oya_mc」 というインスタンス名を付けるところまでは同じです。 その 「oya_mc」 をダブルクリックして,「oya_mc」 内のタイムラインの編集に入ります。 「oya_mc」 内の任意の場所(ステージ外でもどこでも良いです)に, 極小さな,または空(カラ)のムービークリップを作成します。 そしてそのムービークリップにインスタンス名を付けます。 一応 「ko_mc」 というインスタンス名付けたとしておきます。 その 「ko_mc」 を選択して, 「ko_mc」 自体に次のように書きます。 ----------------------------- onClipEvent (load) { this._x = -this._width/2; this._y = -this._height/2; } ----------------------------- そして _root のタイムラインの編集に戻って, _root にレイヤーを1つ追加して, その新しいレイヤーのフレーム1に次のようなスクリプトを書きます。 ------------------------------------ // 親の中に子ムービークリップ「ko_mc」に // gaibu.jpg をロード _root.oya_mc.ko_mc.loadMovie("gaibu.jpg"); ------------------------------------ 階層構造で書いてまとめると次のようになるということです。  _root ←loadMovie を書く   └oya_mc ←基準点中央      └ ko_mc ←onClipEvent (load) を書く これで出来上がりです。 外部画像「gaibu.jpg」をSWFと同じフォルダにでも保存すれば, 自動的に「gaibu.jpg」が「oya_mc」の真ん中に表示されるものができます。 この ◎手段2 のスクリプトは, Flash 5 でも(5,MX,MX2004,8,CS3)使用可能です。 また, ◎手段1,◎手段2 ともに 使用しているスクリプトのバージョンは ActionScript1.0 です。  --- --- --- --- --- ◎手段1 にしても ◎手段2 にしても, ムービークリップを親子の入れ子にすることがまず大切です。 あと,スクリプト(計算式)を簡単にするには, 親のムービークリップの基準点を「中央」にするということです。

a-kira1966
質問者

お礼

早速のご回答ありがとうございます。 BlurFiltanさんの回答は丁寧で分かりやすくいつも見て参考にさせて頂いております。 環境と補足をさせて頂きます。 OSはXPのSP2 Flash 8です。 700x600のステージにimage_boxとtxt_boxというMCがあり、それぞれ外部から変数をもらって表示するようになっています。 トータル120フレームの80フレーム目に読み込ませるように actionレイヤーの80フレームに if (this.image_box == Number(this.image_box)) { loadMovieNum("../image/gazou/"+_root.hensuu+".gif", this.image_box); } else { this.image_box.loadMovie("../image/gazou/"+_root.hensuu+".gif"); } と書いて、 MCに onClipEvent (load) で座標を指示出来ればと考えたわけです。 参考にしたスクリプトはステージの真ん中に配置するもので下記のようになります。 // このムービークリップが読み込まれたとき onClipEvent (load) { // 高さの指定(※可変) var my_h = 200; // 位置の指定(※可変) var my_x = Stage.width/2; var my_y = Stage.height/2; // // サイズの変更 this._width = my_h*this._width/this._height; this._height = my_h; // 座標の移動 // この MC を「指定位置 - MCの幅の半分」に移動 this._x = my_x-(this._width/2); // この MC を「指定位置 - MCの高さの半分」に移動 this._y = my_y-(this._height/2); } これをいじっていて行き詰まってしまいました。 この場合は、image_boxにko_mcを入れ子にするという解釈でよいのですね。 "ムービークリップを親子の入れ子にする" "基準点を「中央」"を守ってチャレンジしたいと思います。 絵のほうから入ったのでスクリプトは全くの初心者です。 また質問することがあるかと思いますが宜しくお願い致します。 ひとつ質問なのですが、"空(カラ)のムービークリップ"というのはどういう状態?のものなのでしょうか。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

> 絵のほうから入ったのでスクリプトは全くの初心者です。 私も絵のほうから入った者です。 今でも絵の方が専門(本職に近い)存在です。 ですから, 「絵を描いてモーショントゥイーンで動かす。」 「複雑に動作を絡ませるときは, ムービークリップの入れ子状態を手動で作成して複雑な動きをさせる。」 というのが基本路線です。 > ひとつ質問なのですが、"空(カラ)のムービークリップ"というのはどういう状態?のものなのでしょうか。 ステージ上に何でも良いので塗りまたは線を描いて, ムービークリップに変換し, そのムービークリップをダブルクリックして, ムービークリップ内の編集に入り, 最初に書いた塗りまたは線を削除すると, 空のムービークリップができます。 その空のムービークリップが存在する親のタイムラインの編集に戻ると, 空のムービークリップは ○ みたいな状態になって, 中心点の位置だけを確認することができます。 ○ みたいになってしまっても, ムービークリップはムービークリップですから, モーショントゥイーンで動かすことも,インスタンス名を付けることもできます。 もう1つは, 何も描かない状態で 「挿入」→「新規シンボル」→「ムービークリップ」にチェックを入れて「OK」をクリック。 これでライブラリ内に空のムービークリップシンボルができます。 ステージ上はなぜか,その空のムービークリップ内のタイムラインに移ってしまいますが, 「シーン1」をクリックしてもとの親(_root)の編集に戻り, ステージ上にライブラリの空のムービークリップをドラッグ&ドロップで引きずり出しても, 空のムービークリップは作成できます。 好き嫌いの問題でどちらでもかまいませんが, 私は最初に書いた方法で空のムービークリップを作成する方が好きです。

a-kira1966
質問者

お礼

詳しいご回答有難うございました。 真ん中の表示もきちんとできるようになりました。 まだ分からない言葉とか用語などあってちんぷんかんぷんなところが多いですが 色々なことが出来るように勉強して行きたいと思っています。 これからも宜しくお願い致します。

関連するQ&A

専門家に質問してみよう