- ベストアンサー
Flash CS5Proを使ったスライドショーについてのアイデアを教えてください
- 初めてAS3.0を使っている方にとってイベントリスナーは難しい壁となることがあります。シンプルなスライドショーを作りたい場合、行き詰まることがあります。
- 行き詰まった点としては、連続した番号の画像ファイルの最後の画像へ行ったら次の画像へ行かないようにする機能や、画像サイズが違う場合にキレイに縮小する機能、現在表示中の画像の前後の画像をあらかじめ読み込む機能、スライド効果を実装することが挙げられます。
- 具体的なアイデアとしては、画像の読み込み失敗時に最後の画像とみなす方法を採用することや、縦になっている画像を適切に縮小する方法を考えること、現在表示中の画像の前後の画像を事前に読み込んでおくこと、スライド効果を実現するために複数の画像を同時に操作する方法などがあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>スライド効果(次の画像を表示する際、現在表示中の画像が画面外へ向かいつつ同時に次の画像がやってくる感じで) 最後の↑コレを忘れてました。 これはマスクでいいんじゃないですか? AS1.0を使っていたのであれば、通常のマスクの使い方(レイヤー右クリック→マスク)は知っているものと思われます。 AS3.0でも同じ方法は使えますが、スクリプトでやるなら、 ImgMC.mask = MaskMC; となります。 ただし、このスクリプトはひとつのマスクに対してひとつのオブジェクトしか適用できないので、 今回のように複数のオブジェクトがある場合は、 ひとつのムービークリップを用意し、その中に各画像を読み込んだ上で、 そのムービークリップにマスクを掛ける手法でいいと思います。 //予め、ムービークリップ(AllImg)と(MaskMC)を用意 for(var i=1;i<=予定枚数;i++){ this["IMG" + i] = new Loader(); this["IMG" + i].load(new URLRequest("hoge" + i + ".jpg")); this["IMG" + i].x += 規定の幅(画像の横幅+α); AllImg.addChild(this["IMG" + i]); } AllImg.mask = MaskMC; な感じです。 で、ボタン操作でAllImg.x を操作してあげればいいです。
その他の回答 (1)
- BumeshiOK
- ベストアンサー率92% (12/13)
要点だけ。 ◎読み込み失敗の検出 contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR,onError); function onError(e:IOErrorEvent):void{ //読み込み失敗=画像なしと見なす処理 } ◎読み込み画像をキレイに縮小する。 スムージングですね。厳密にはちょっとボケた感じになりますが、 ジャギジャギよりマシです。 var IMG = new Sprite(); var LD = new Loader(); LD.load(new URLRequest("hoge.jpg")); LD.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); addChild(IMG); function onComplete(e:Event){ IMG.addChild(LD); LD.scaleX = 0.25;//お好きな大きさで LD.scaleY = 0.25; var BMP = Bitmap(LD.content); BMP.smoothing = true; } ◎一括読み込み これが一番説明難しいです。現状の構造が不明なので。 展開予定枚数分をfor文で回して読み込めば良いだけですが、 for(var i=1;i<=予定枚数;i++){ this["IMG" + i] = new Loader(); this["IMG" + i].load(new URLRequest("hoge" + i + ".jpg")); } で、用意しておいて、 一定時間間隔で、addChild(this["IMG" + 画像番号])で配置していけばよろしいかと。
お礼
早速の回答、ありがとうございます! とりあえず、順番に表示することは成功しました。 少しずつ前進しています・・・。
補足
root上のフレームにこのように記述したところ(他は移動用のボタンがあるだけ)、上手く表示されたので、回答いただいたソースを組み合わせ、ボタンを押すことで次々と再生されるようになる段階までなんとかしてみます。 import flash.display.BitmapData; var n:Number = 0;//現在再生中のファイル番号 var a:Number = 5;//先読み込みする枚数 var mc:MovieClip = new MovieClip(); var mc2:MovieClip = new MovieClip(); var space:Number= 40;//画像間の隙間 stage.addChild(mc); stage.addChild(mc2); stage.setChildIndex(mc,0); stage.setChildIndex(mc2,0); mc.x = 0; mc2.x = -800-space;//画像サイズ var ldr:Loader = new Loader(); ldr.load(new URLRequest(n+".jpg")); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); //読み込み完了イベントの処理 function onComplete(e:Event):void{ var loadedImage:Bitmap = Bitmap(ldr.content); loadedImage.smoothing = true; mc.addChild(loadedImage); var wide:Number = ldr.content.width; mc.x=(stage.width - wide)/2; }
お礼
このようなあいまいな質問に答えていただき、ありがとうございました! 具体的に疑問を絞った質問をさせて頂きます・・・。