- 締切済み
Flashの表示サイズを動的に変更させる方法
お世話になっております。 ブラウザの表示サイズ(高さ、幅)を変更した場合に、Flash内の特定のムービークリップの大きさ、表示位置を変更させるにはどのようにしたらいいのでしょうか? ちょうど下記のようなイメージです。 http://fotologue.jp/fatman#/821175/1506979 中央の写真は常に中央表示されて、ブラウザの表示サイズを変更すると写真のサイズもそれにともない変更されると思います。 下に表示されるメニューも大きさが変わり表示位置が変わると思います。 下記の応用(?)の様な気もするのですがわからなくて・・・。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1838609 以上、ご教授の程宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
最近, 同じ系統のご質問が多いですが,コレ系が最近流行なのでしょうか…? ふとつぶやいてみただけの素朴な疑問です。 - - - - - - - - - - - - ご質問で書かれている URL までたどり着かれているのでしたら, Flash (ActionScript)が難しいのではなく, 数学(どちらかというと算数)の部分が難しいのだと思います。 そういう場合は, Flash から一度目を離して, 机上の紙に落書きをすればだいたいは解決すると思います。 机上の紙の落書き例↓ //////////////////////////////////////////////////////////////////////// x=0 x=Stage.width y=0 y=0 □□□□□□□□□□□□□□□□□□■■+ □+■■□□□□□□□□□□□□□□■B ■ □■A ■□□□□□□□□□□□□□□■■■ □■■■□□□□□□□□□□□□□□□□□ □□□□□□■■■■■■■■■□□□□□□ □□□□□□■■■■M■■■■□□□■■■ □□□□□□■■■■+■■■■□□□■C + □□□□□□■■■■■■■■■□□□■■■ □□□□□□■■■■■■■■■□□□□□□ □□□□□□□□□□□□□□□□□□□□□ ■■■■■■■■■■■■■□□□■■■■■ ■■■■■■D ■■■■■■□□□■■E ■■ +■■■■■■■■■■■■□□□■■■■+ x=0 x=Stage.width y=Stage.height y=Stage.height //////////////////////////////////////////////////////////////////////// ※ A~E と M は MC(ムービークリップ) です。 ※ A~E と M の +印は各MCの基準点です。 MC の基準点は絵などを MC に変換するときに 「シンボルに変換」ダイアログで決めることもできますし, また,変換後に移動することもできます。 「インスタンスの基準点」 http://homepage3.nifty.com/ginga-b/MX/inst_refpoint.html ※ x=○○ や y=○○ はステージのコーナーの座標のメモ書きです。 ムービークリップA~E はそんなに難しくありませんが, 問題は真ん中の ムービークリップM ですね。 ムービー自体は1フレームだけしかない場合について回答します。 まず, ムービークリップA~E と M のインスタンス名を それぞれ mcA,mcB,mcC,mcD,mcE,mcM としておきます。 そして, mcA~mcM のあるレイヤーとは別に新規でレイヤーを作って, そのレイヤーをスクリプト専用レイヤーと決めておきます。 そしてそのスクリプト専用レイヤーフレーム1の 空白キーフレームにスクリプトを書きます。 その状態で書くスクリプトは次の---内のようになると思います。 上のように mcA ~ mcM を用意した場合, ---内をコピペするだけで使えると思います。 ------------------------------------------ // ムービーの拡大・縮小をなしにする Stage.scaleMode = "noScale"; // ムービーを左上を基準に固定する Stage.align = "TL"; // // mcM のステージに対する大きさを指定(※可変) var mcM_size = 60/100; // // 変数 mcM_ratio に mcM の 縦/横 の比を算出 var mcM_ratio = _root.mcM._height/_root.mcM._width; // // // 各ムービークリップの座標や大きさを指定するユーザ定義関数 // designCoordinatesの定義 function designCoordinates() { // // 各ムービークリップの座標を指定 _root.mcA._x = 10; _root.mcA._y = 10; _root.mcB._x = Stage.width; _root.mcB._y = 0; _root.mcC._x = Stage.width; _root.mcC._y = Stage.height/2; _root.mcD._x = 0; _root.mcD._y = Stage.height; _root.mcE._x = Stage.width; _root.mcE._y = Stage.height; _root.mcM._x = Stage.width/2; _root.mcM._y = Stage.height/2; // // --- mcM の大きさに関するスクリプト --- // もしステージの形が mcM の形より縦長であれば if (Stage.height/Stage.width>=mcM_ratio) { // mcM の大きさをステージの幅との比で決定 _root.mcM._width = Stage.width*mcM_size; _root.mcM._height = Stage.width*mcM_size*mcM_ratio; // もしステージの形が mcM の形より横長であれば } else { // mcM の大きさをステージの高さとの比で決定 _root.mcM._width = Stage.height*mcM_size/mcM_ratio; _root.mcM._height = Stage.height*mcM_size; } } // // // ユーザ定義関数 designCoordinates の実行(初回) designCoordinates(); // // ---ステージの大きさの変動に対するスクリプト--- // リスナーオブジェクトの作成 myListener = new Object(); // // リスナーオブジェクト.onResize 関数の定義 myListener.onResize = function() { // ユーザ定義関数 designCoordinates の実行 designCoordinates(); }; // // myListener を Stage.addListener に登録 Stage.addListener(myListener); ------------------------------------------ // mcM のステージに対する大きさを指定(※可変) var mcM_size = 60/100; の 60/100 (60%の意味)は適当に変えてください。 参考に書かれている, http://oshiete1.goo.ne.jp/kotaeru.php3?q=1838609 は,漠然としたものの回答であるため, Stage.align = "TL"; は書いていませんが, 上のスクリプトの最初の2行, // ムービーの拡大・縮小をなしにする Stage.scaleMode = "noScale"; // ムービーを左上を基準に固定する Stage.align = "TL"; この部分と,最後の, // ---ステージの大きさの変動に対するスクリプト--- // リスナーオブジェクトの作成 myListener = new Object(); …省略… この部分は ActionScript 特有の呪文のようなお決まり文句と考えると, その間はほとんど数学(どちらかというと算数)です。 ご質問されている物の場合, ActionScript特有のお決まり文句の部分の存在を知るまでが大変で, その部分だけが ActionScript のようなものと考える方が良いと思います。 あとは紙などに落書きして考えると良いです。 私自身も, 「QNo.2406468 flashの書籍について」 http://oshiete1.goo.ne.jp/qa2406468.html ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/qa2406468.html ここの#1で同様のスクリプトを書いていますが, 上と下の呪文部分は全く変えていません。 function 内のみを変えただけです。 他の場合でも, 変えるとすれば実行する function名 くらいだと思います。 その他, インスタンス名 mcF というMCを作ったとして, その mcF の位置を中途半端な場所で浮かせたい場合は, mcF の基準点を中央にして, function designCoordinates() { // 各ムービークリップの座標を指定 … 略 … _root.mcF._x = Stage.width*3/10; _root.mcF._y = Stage.height*7/10; … 略 … } のようにすると, その mcF はステージの左下の方に浮いたような状態になります。 また, ウィンドウを小さくすると,MCどうしが重なりますが, その上下関係は mcA ~ mcM を置くレイヤーによって決めてください。 -・-・-・- その他補足 -・-・-・-・-・-・-・-・-・-・-・-・-・-・- パブリッシュするときは, 「パブリッシュ設定」で,「HTML」タブを選択し, 「サイズ」を「パーセント」にして, 幅×高さ を [100] × [100] パーセント などのようにパーセントで指定してパブリッシュしてください。 あと, Flash ではなく,HTML の話になりますが, 100×100 でパブリッシュしても, ブラウザでその HTML を見ると上と横に隙間(マージン)ができます。 その隙間を無くしたい場合は,HTML の BODYタグ, <BODY bgcolor="#FFFFFF"> のようになっている部分を, <BODY bgcolor="#FFFFFF" topmargin="0" leftmargin="0" rightmargin="0"> のように変えてください。 するとデフォルトの隙間は消えます。
お礼
sassakunさん ご丁寧な回答ありがとうございます。 いつもFlashをつくる時は簡単なサンプルを作ってからやっていたのですが、机上で絵を書く事はやっていませんでした。 絵を書いて考えてみたのですが、また別な視点と頭の中が整理されて息詰まってる時ももすんなり解決しそうな気がします。