- ベストアンサー
外部画像を読み込み、ボタンで右左に動かしたい
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どうしたら良いかと問われましても ActionScript のバージョンを明記されないと 場合によっては1文字たりとも回答できませんよ。 勝手に ActionScript 3.0 を使うという条件で 方法の一例を回答します。 まず横長の外部画像は「gazou.jpg」というファイル名で Flash の SWF ファイルやそれを貼り付ける HTMLファイル と同じフォルダ内に置くものとします。 任意のフォルダ ├○○.fla (○○.swf 1を作る) ├○○.swf ├○○.html (○○.swf を貼り付ける) └gazou.jpg (外部画像) また,ステージ上のフレーム1には, 「<」のボタン,「□」のボタン,「>」のボタンの3つが用意されていて 「<」 ボタンには「L_btn」(Lは左の意味), 「□」のボタンには「S_btn」(Sは Stop の意味), 「>」のボタンには「R_btn」(Rは右の意味) というインスタンス名が それぞれのボタンに付けてあるものとします。 (インスタンス名は各ボタンを1つずつ選択した状態で,プロパティパネルより命名する。) それら3つのボタンとは別に ActionScript を書く用にするレイヤーを挿入し フレーム1 のキーフレームに 次のスクリプトをコピペします。 /////////////////////////////////////////////// //外部画像ファイルへのパスを設定 var url:URLRequest = new URLRequest("gazou.jpg"); //外部画像を動かすスピードを設定 var spd:Number = 7.5; //外部画像を配置するy座標を設定 var y_pos:Number = 20; //外部画像の左端が来る限界位置を設定 var L_lim:Number = 0; //外部画像の右端が来る限界位置を設定 var R_lim:Number = stage.stageWidth; //---↑以上が適当に変更する設定↑--- //Loaderインスタンスを作成&配置 var ld:Loader = new Loader(); ld.x = L_lim; ld.y = y_pos; addChild(ld); //外部画像の横幅を入れる変数の宣言 var gazou_w:Number; //Loaderを動かすpx数を入れる変数の宣言 var move_px:Number; //外部画像にアクセス可能になった時に関数onLoadINITを実行 ld.contentLoaderInfo.addEventListener(Event.INIT,onLoadINIT); function onLoadINIT(e:Event):void { //外部画像の横幅を記録 gazou_w = e.target.width; //L_btnクリック時に関数 onLClick を実行 L_btn.addEventListener(MouseEvent.CLICK,onLClick); //S_btnクリック時に関数 onSClick を実行 S_btn.addEventListener(MouseEvent.CLICK,onSClick); //R_btnクリック時に関数 onRClick を実行 R_btn.addEventListener(MouseEvent.CLICK,onRClick); } //Loaderに外部画像をロード ld.load(url); //L_btnクリック時に実行する関数 onLClick を定義 function onLClick(e:MouseEvent):void { //Loaderを動かすpx数を spd にする move_px = spd; //1フレーム時間ごとに毎回 関数 moveLoader を実行 addEventListener(Event.ENTER_FRAME,moveLoader); } //S_btnクリック時に実行する関数 onSClick を定義 function onSClick(e:MouseEvent):void { //1フレーム時間ごとに毎回 関数 moveLoader を実行するのをやめる removeEventListener(Event.ENTER_FRAME,moveLoader); } //R_btnクリック時に実行する関数 onRClick を定義 function onRClick(e:MouseEvent):void { //Loaderを動かすpx数を -spd にする move_px = - spd; //1フレーム時間ごとに毎回 関数 moveLoader を実行 addEventListener(Event.ENTER_FRAME,moveLoader); } //関数 moveLoader を定義 function moveLoader(e:Event):void { //Loaderのx座標を move_px 動かす ld.x += move_px; //Loaderの左端x座標が限界を超えたら if (ld.x>L_lim) { //Loaderの左端x座標を左の限界にする ld.x=L_lim; //1フレーム時間ごとに毎回 関数 moveLoader を実行するのをやめる removeEventListener(Event.ENTER_FRAME,moveLoader); //Loaderの右端x座標が限界を下まわっていたら } else if (ld.x < - gazou_w+R_lim) { //Loaderの右端x座標を右の限界にする ld.x=- gazou_w+R_lim; //1フレーム時間ごとに毎回 関数 moveLoader を実行するのをやめる removeEventListener(Event.ENTER_FRAME,moveLoader); } } /////////////////////////////////////////////// パブリッシュ または 「制御」→「ムービープレビュー」で動作確認できると思います。 //外部画像ファイルへのパスを設定 var url:URLRequest = new URLRequest("gazou.jpg"); これ↑で設定する外部画像のパスは ○○.html (○○.swf を貼り付ける) から見たパスです。 ○○.swf から見たパスではないので階層を変える場合は注意してください。 ◎例 任意のフォルダ ├○○.html (○○.swf を貼り付ける) └files(フォルダ) ├○○.fla (○○.swf 1を作る) ├○○.swf └gazou.jpg (外部画像) この場合は var url:URLRequest = new URLRequest("files/gazou.jpg"); になります。 =*=*= =*=*= =*=*= > 1フレームでストップして、ボタンで2フレームに移動して > トゥイーンで動かしたら良い。 その路線で単純に行くとすれば左右どちらかにしか進めませんよね。 左右どちらにでも動かす場合は フレームを逆再生させる必要が出てきます。 逆再生させるのでしたら次のページが参考になると思います。 (ただし次のページは ActionScript 3.0 ではありません。ActionScript 1.0 です。) 「ロールアウトで逆戻りするアニメーション」 http://fumiononaka.com/TechNotes/Flash/FN0303003.html また,外部画像ですから編集中は見えないので, トゥイーンで動かすにしても結構頭を使うと思います。
その他の回答 (1)
- hi_kurokun
- ベストアンサー率45% (20/44)
逆方向の移動を10フレーム目に定義しては?
補足
回答ありがとうございます。 反対方向に進む時には、その見えている状態のまま反対方向に進みたいのですが どのようにしたら良いか分かりません。
お礼
ありがとうございました。 プログラムの意味はうっすらとしか、まだ分かりませんが。。。 ソースまで書いていただいてありがとうございます。 実際に動きます! さらにソースを読み解いて理解しようと思います。 この度は、本当にありがとうございました。 >どうしたら良いかと問われましても >ActionScript のバージョンを明記されないと 仰るとおり、ActionScript 3.0(FLASH CS5)です。