• ベストアンサー

スクリーン中央を中心にズームするには?

_width、_heightを変えてムービークリップのサイズを変更した際に、そのムービークリップをスクリーン中央(Stage.width/2、 Stage.height/2)を中心にズームした様に、_x、_yも変更したいです。 onClipEvent (enterFrame){   _width = _root.size;   _height = _root.size;   // _x はどう書いたらよい?   // _y はどう書いたらよい? } _root.sizeはテキスト入力などで変えるとします。  

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

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

状況が正確にはつかめませんが, 結論から書くと,「_x、_yも変更する必要はない」 と思います。 ムービークリップをActionScriptで操作する場合, 何でもかんでも「基準点」が基準になります。 ムービークリップの _x 座標も _y座標も,ムービークリップの「基準点」の座標です。 ムービークリップの _rotation を変えて回転させるときも「基準点」を中心に回転します。 ムービークリップを拡大縮小させるときも同じく, 「基準点」から拡がるように,または「基準点」に向けて収束するように, 拡大 または 縮小 します。 インスタンスには 「変形点」という「中心点」と,「基準点」という「中心点」があります。 つまり「中心点」は2つあります。 「変形点」という「中心点」は,オーサリングツール(FlashMXなど)上で, ムービークリップを回転させたり拡大縮小する際に中心となる「中心点」です。 ActionScript では関係しません。 「基準点」という「中心点」は,FlashPlayer上で, ムービークリップを回転させたり拡大縮小する際に中心となる「中心点」です。 これが ActionScript で関係する中心点です。 オーサリングツール上では, 「変形点」はムービークリップ上で ○ のように表示されています。 「基準点」はムービークリップ上で + のように表示されています。 「変形点」と「基準点」は同じ位置にある場合が多いので, ○ と + が合体して 田 の周りが円い形になって表示されていることが多いです。 ステージの中央部分を拡大したいのですから, まずムービークリップの+印の基準点がステージの中央になるようにムービークリップを配置し, 次にそのムービークリップ内の編集に入って, その中のものの拡大縮小の中心にしたいポイントを +印の基準点の位置に動かせば良いということになります。 もし,ムービークリップ内が複数フレームなどになっていて, ムービークリップの内容物がつかみにくい場合は, ムービークリップをさらにムービークリップに変換して, その中の子ムービークリップの位置を操作すれば良いと思います。 =============================================== ステージ中央を中心に拡大する場合に限らず, 変動する任意の位置を中心に拡大縮小させる場合も, ムービークリップを親子の入れ子状態にして, 親の基準点(つまり親の座標)をActionScriptで拡大縮小させる中心ポイントに移動させて, 子の基準点をその反対向きにActionScriptで移動させるという方法を取ります。

kingfruits
質問者

補足

ご回答ありがとうございます。 実は、duplicateMovieClipで作ったムービークリップでして、 ムービークリップを入れ子にする事ができないようなので、(オーサリングツールはPalafra! Actionscriptは1.0相応) この様な質問をしました。 やりたい事は、duplicateMovieClipでムービークリップを_root上に複数配置後、_root.sizeを変更すると、各ムービークリップがスクリーン中央を中心にズームさせたいです。

その他の回答 (1)

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

#1 です。 > 実は、duplicateMovieClipで作ったムービークリップでして、 > ムービークリップを入れ子にする事ができないようなので、 > (オーサリングツールはPalafra! Actionscriptは1.0相応) > この様な質問をしました。 ParaFla! をお使いのような最重要事項は先に書いていただかないと困ります。 次に duplicateMovieClip です。 そして,最初の質問です。 > ムービークリップを入れ子にする事ができないようなので、 できますよ。 もっとも ParaFla! の場合は,スプライトの入れ子ということになりますが。 絵などをスプライトの中に入れて, そのスプライトを別のスプライトに入れれば良いだけです。  _root    └ 親スプライト       └子スプライト           └画像など それで, 子スプライトに例えば,「my_mc0」 などというインスタンス名を付けて, 親スプライトのフレーム1などのアクションで, 次のような感じのことを書けば良いのです。 for(i=1; i<=5; i++){ this.my_mc0.duplicateMovieClip("my_mc"+i,i); this["my_mc"+i]._x = i*30; trace(this["my_mc"+i]); } ただし上のスクリプトは正常に動作しますが, 数値や並べ方などは私が適当に書いたデタラメです。 この 親スプライトの基準点が,ステージ中央になるように配置すれば良いのです。 そうすれば, 親スプライトをズームさせるだけで(どうやってズームさせるのかは知りませんが), > 各ムービークリップがスクリーン中央を中心にズームさせたいです。 ということができます。 こんな感じです         子 子 子 子 子 ┐親の中         ■ ■ ■ ■ ■ ┘           ↓ズーム↓   ■■  ■■  ■■  ■■  ■■   ■■  ■■  ■■  ■■  ■■ ただ, 以上はだいたいのスクリプトとおおまかな作業内容の流れを書いただけです。 親ムービークリップ内の基準点の位置に, 拡大させたい部分を duplicateMovieClip で配置するのは, 作成したいものによってスクリプトはまるで違いますから, この辺を作成したいものによって調節していったり,計算しないと,思い通りには表示されないと思います。 ご質問などを書かれていらっしゃる雰囲気からして, おそらくこれは無理ではないかと推測されますが, 試行錯誤してやれば,決して不可能ではないことだと思います。 たくさんのことを追いかけても何もできないまま終わるだけです。 duplicateMovieClip はとりあえず書かずに, 親スプライト内に子スプライトを手動で4つくらい配置して, その親スプライトをズームさせてみるころからしていくのが良いのではないかと思います。 話は#1の最初に戻ります。 どうやってズームさせるのかは知りませんが(私の決める所ではない), 親スプライトをズームさせれば,基準点を中心にズームするはずですよ。 基準点をステージ(キャンバス)中央に配置すれば, ステージ中央を基準に拡大します。

kingfruits
質問者

お礼

ご回答、本当にありがとうございます。 >ParaFla! をお使いのような最重要事項は先に書いていただかないと困ります。 >次に duplicateMovieClip です。 すみませんでした。 親ムービークリップ内でduplicateMovieClipするって考えがありませんでした。 というか、難しく考えていました。 >試行錯誤してやれば,決して不可能ではないことだと思います。 ありがとうございます。 本当に実現したいことは、もう少し複雑なので、頑張ってみます。