プロが教えるわが家の防犯対策術!

はじまして、flashスクリプト初心者です。
頼まれて、フォトギャラリーを作っています。

写真を外部読み込みで、左にサムネイル、右に表示画像
というような設計になっています。
以下のサイトを参考に、ここまではできましたが、
http://www.webdesignworkshop.net/workshop/load_p …

表示画像が縦(600*400)のものと横(400*600)のものがあるため、
読み込みmcは600*600pxの正方形にしました。
すると読み込んだ画像がどうしても左上によってしまい、
mcに読み込んだ外部ファイルのセンタリングはできないものかと、悩んでおります。
いろいろ検索かけてみましたが見当たらず、どうか、宜しくお願い致します。

A 回答 (3件)

読み込み位置の問題でしょうね。


確かJPEGなんかの画像は左上が(0,0)のはずですから、逆算してセンターの位置に来る様に読み込ませれば良い訳です。
画像ファイルの(0,0)の位置を変える方法は無かった気がします…あったかな…?

面倒なら画像ごと中央が(0,0)のswfにしちゃえば解決しますね。
何も必ずしもJPEGのまま読み込まなければいけない訳じゃないのですし。
    • good
    • 0
この回答へのお礼

早速のご回答どうもありがとうございます。

>読み込み位置の問題でしょうね。
確かJPEGなんかの画像は左上が(0,0)のはずですから、逆算してセンターの位置に来る様に読み込ませれば良い訳です。


全部縦(600*400)の画像だったらいいのですが、横(400*600)のものがあるため、こっちは画面カツカツなため(表示領域600*600)、mcの読み込み位置をずらすのはキビシいのです....

>面倒なら画像ごと中央が(0,0)のswfにしちゃえば解決しますね。
何も必ずしもJPEGのまま読み込まなければいけない訳じゃないのですし。

ありがとうございます。
やってみます。でも一つ問題が...画像が何百枚もあって、
タイムラインに読み込む方法もこの枚数で諦めました....

縦のものと横のもの、読み込みMCを分けた方がいいのでしょうか。

お礼日時:2008/06/02 01:14

>でも一つ問題が...画像が何百枚もあって



なるほど。MCを分けるにせよswfを作るにせよそれは手間ですね(苦笑)。
じゃあ、いっそのこと画像の方を変えちゃったらどうでしょう?
PhotoShopがあることが前提ですが、バッチ処理で600×600の画像に一括変換しちゃうわけです。
読み込み>カンバスを指定サイズに拡大>Web用に書き出し
といった流れでバッチを作ってしまえばいけるかと。
全てが600×600の画像になるので多少重くはなりますが、頼まれ仕事ならそれもありかと。
    • good
    • 0
この回答へのお礼

わざわざお返事いただきありがとうございます!
flash上で縦横比をかえてしまうということですね。
もしくはバックと同じ色をつけて600*600でjpgで写真を中央表示にしてバッヂ処理...も
頭の運動になります...
試してみます。ほんとうにありがとうございます!

お礼日時:2008/06/03 02:40

JPEGをロードしてみない限りは,


FlashはJPEGのサイズを認識できませんよね。

ですから,
 とりあえずJPEGをロードしてみて,
 縦横サイズを確認して,
 サイズに応じた座標にムービークリップを移動させる
ということになります。

これには FlashMX2004 以降では,
loadMovie でロードするのではなく
 MovieClipLoader.loadClip でJPEGをロードして,
 MovieClipLoaderのリスナー.onLoadInit でロード完了を待って,
 JPEGのサイズに応じた座標にムービークリップを移動させる
ということをするのが一般的かもしれません。

しかし,
別にこのような新しめの方法を取らなくても,
古くからある(Flash5からある)方法で簡単にできます。


ご質問で書かれていらっしゃるURLのFLAサンプルの場合,
_root にある「target_mc」というインスタンス名のムービークリップにメインのJPEGを表示させるようですが,
その「target_mc」というインスタンス名のムービークリップを選択した状態で,
アクションパネルを表示させ,
ムービークリップ自体に次のように書けばできます。


// このMC(ムービークリップ)がロードされたときに実行
onClipEvent (load) {
// 中心にしたいx座標を指定(例:ステージ中央より20px右)
center_x = Stage.width/2+20;
// 中心にしたいy座標を指定(例:ステージ中央より30px上)
center_y = Stage.height/2-30;
// このMCのx座標を
// 指定した中心座標よりMCの幅の半分だけ左に移動
this._x = center_x-this._width/2;
// このMCのy座標を
// 指定した中心座標より MCの高さの半分だけ上に移動
this._y = center_y-this._height/2;
}


onClipEvent (load) {}
はそれ自身が表示されたときも,
またそれ自身に何かのムービーや画像がロードされたときにも実行されるハンドラです。
※フレームには書けません。ムービークリップ自体にのみ書けます。

Stage.width でステージの幅が自動取得できます。
Stage.width/2 だとステージの幅の半分ですから,ステージの中央座標ということになります。
Stage.height に関しても同様です。
※Stage.width や Stage.height は MX 以降で使えます。

this._width でムービークリップの幅が自動取得できます。
this._width/2 だとムービークリップの幅の半分ですから,中心にしたい座標の差が求められます。
this._height に関しても同様です。


図示しにくいのですがこんな感じです↓。

======ステージの中央を中心にしたい場合=========

    ←────── ステージ──────→
     Stage.width/2     Stage.width/2
   ┣━━━━━━━━╋━━━━━━━━┫

       ←───ムービークリップ───→
        this._width/2  this._width/2
      ├──────┼──────┤
      ↑
 Stage.width/2-this._width/2

==========================================
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございます!
丁寧におしえていただき、大変助かりました。
ムービークリップの中心にしたい座標を指定できるのですね。
苦戦の末、これで中央配置できました!
多少混乱気味ですが、がんばって理解します!

>onClipEvent (load) {}
はそれ自身が表示されたときも,
またそれ自身に何かのムービーや画像がロードされたときにも実行されるハンドラです。
※フレームには書けません。ムービークリップ自体にのみ書けます。

それ自身が表示されたときも,またそれ自身に何かのムービーや画像がロードされたときにも....便利なような複雑なような....ありがとうございます。

今回は左にサムネイルがあるため、ステージに対して中央配置でなかったため苦戦しました。
ムービークリップの中心にしたい座標を指定できるということで、大変勉強になりました、本当にどうもありがとうございます!!

お礼日時:2008/06/03 02:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!