• ベストアンサー

Action Script2.0で開発してます。

Action Script2.0で開発してます。 CS4上であらかじめ生成してあるmcにpngファイルをロードして画像表示しています。 その後、画像の中心を基準点として縮小拡大をしたいのですが、 pngファイルをロードする時にはmcの基準点を左上に設定して位置合わせしているために、 ロード後に基準点を画像の中心に移動したいと思います。 ActionScript2.0でどのようにプログラミングすればいいのでしょうか?

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

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

単純に言えば, 「MCの基準点を画像の中心に移動」 させるのではなく 「MCの基準点に画像の中心が来るようにロード」 させれば良いんです。 外部画像は HTML や SWF などと同じフォルダに入れてあって その画像のファイル名は 「gazou.png」 であったとします。 また その 「gazou.png」 をロードするMCのインスタンス名を 「load_mc」 としていたとします。 この場合のスクリプト例↓ -------------------------------------------- //空のMC「loader」を「load_mc」の中の深度0に作成 //(「loader」はMCを参照する変数名 「_mc」はインスタンス名) var loader:MovieClip = load_mc.createEmptyMovieClip("_mc", 0); //MovieClipLoaderクラスのインスタンス「mcl」を作成 var mcl:MovieClipLoader = new MovieClipLoader(); //ロード監視用のインスタンス「loadListener」を作成 var loadListener:Object = new Object(); //画像ロード完了後の動作を定義 loadListener.onLoadInit = function(taget:MovieClip):Void { //画像をロードしたMCを //自分の大きさの半分 -方向 の座標に移動 taget._x = -taget._width/2; taget._y = -taget._height/2; }; //「mcl」のロード監視役として「loadListener」を登録 mcl.addListener(loadListener); //MC「loader」をターゲットとして「gazou.png」をロード mcl.loadClip("gazou.png", loader); -------------------------------------------- ※ActionScript 2.0  Flash 8 以上で使用可  Flash Player 8 以上で閲覧可  (スクリプトの内容自体は MX 2004 でも使えるが  外部画像として PNG がロードできるようになったのが  Flash 8 以上 & Flash Player 8 以上のため。) 上記のスクリプトは あくまでも 「画像の大きさがわからない」 という前提で書いています。 もし画像の大きさがあらかじめわかっていれば MovieClipLoaderなど使用せずに 「load_mc」の中に「_mc」というインスタンス名のムービークリップを作って その 「_mc」 の基準点の座標を 「load_mc」 の基準点から左上に画像の大きさの半分だけずらして配置し その 「load_mc」の中の 「_mc」 に 「gazou.png」 を loadMovie でロードしても良いです。  _root   └load_mc      └_mc (画像の大きさの半分だけ -方向 に配置) このようする場合, スクリプトはたった1行です。 -------------------------------- load_mc._mc.loadMovie("gazou.png"); -------------------------------- ※ActionScript 1.0 (2.0設定でも良い)  Flash 8 以上で使用可  Flash Player 8 以上で閲覧可  (スクリプト内容自体は Flash 5 でも使えるが    …以下同文… )  

youzan1231
質問者

補足

ありがとうございます。 「MCの基準点に画像の中心が来るようにロード」させてうまくいきました。 もう少し教えていただけますか。 この画象をいったん消して、別のイベントが発生した時にもう一度同じMCに別の画象を表示させようとする場合、最初のloaderはremoveして、別の画象のために同じようにloaderをcreateするという考え方でいいのでしょうか? それとも、最初のloaderを活かしておいて、それに別の画象を再度loadClipするという考え方のがいいのでしょうか? どうも2回目以降の画象をloadClipしても表示されないようなんですけど。 よろしくお願いします。

その他の回答 (1)

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

#1です。 補足で書かれていらっしゃることがよくわかりませんが。 > 2回目以降の画象をloadClipしても表示されないようなんですけど。 そういう現象は起こりませんよ。 外部PNG画像が「gazou1.png」「gazou2.png」「gazou3.png」という3枚であったとします。 また, 各画像をロードするためのボタン「btn1」「btn2」「btn3」と MC「loader」から外部画像をアンロードするためのボタン「btn0」をステージ上に作成したとします。 その場合のスクリプト例↓ ------------------------------------------- //空のMC「loader」を「load_mc」の中の深度0に作成 //(「loader」はMCを参照する変数名 「_mc」はインスタンス名) var loader:MovieClip = load_mc.createEmptyMovieClip("_mc", 0); //MovieClipLoaderクラスのインスタンス「mcl」を作成 var mcl:MovieClipLoader = new MovieClipLoader(); //ロード監視用のインスタンス「loadListener」を作成 var loadListener:Object = new Object(); //画像ロード完了後の動作を定義 loadListener.onLoadInit = function(target:MovieClip):Void { //画像をロードしたMCを //自分の大きさの半分 -方向 の座標に移動 target._x = -target._width / 2; target._y = -target._height / 2; }; //「mcl」のロード監視役として「loadListener」を登録 mcl.addListener(loadListener); //---↓ココから後を変更↓--- //ボタン「btn0」クリック時の動作を定義 btn0.onRelease = function():Void { //MC「loader」にロードされたものをアンロード loader.unloadMovie(); }; //変数 i を 1,2,3 と変えながらループ for (var i:Number = 1; i <= 3; i++) { //「btn1」~「btn3」に固有の変数 n を設定 this["btn" + i].n = i; // //「btn1」~「btn3」クリック時の動作を定義 this["btn" + i].onRelease = function():Void { //MC「loader」をターゲットとしてPNGをロード mcl.loadClip("gazou" + this.n + ".png",loader); }; } ------------------------------------------- 空のMCをスクリプトで作成しても,手動で作成しても,ムービークリップであることには変わりありません。 手動で作成したムービークリップと同じように, MC「loader」 も一度作成すると,何度でもロードに使うことはできます。 また, ロードする度に MovieClipLoader のイベントリスナーの再定義や登録などもする必要はありません。  

youzan1231
質問者

お礼

ありがとうございます。 こちらの間違いでした。

関連するQ&A