イメージギャラリーの最後までいったら「次へ」ボタンを消す

このQ&Aのポイント
  • イメージギャラリーの制作中です。写真は40枚で、最後の写真になったら「次へ」ボタンを消して表示されないようにしたいです。
  • 「next_btn」というボタンに関するスクリプトがあり、最後の写真になったら「次へ」ボタンを消すように設定しています。
  • 環境はWin XP、Flash CS3、actionscript3、flashplayer9です。
回答を見る
  • ベストアンサー

イメージギャラリーの最後までいったら「次へ」ボタンを消す

イメージギャラリーを制作中です。 配置する要素は「写真」、「前へ」ボタン、「次へ」ボタン、で写真は40枚です。 写真は外部読み込みではなくてphoto_mcに入れ込んでいます。 最後の写真になったら「次へ」ボタンを消して表示されないようにしたいのですがどうしたらよろしいでしょうか? 一部ですが以下が「next_btn」のスクリプトです。 //---ボタン「next_btn」に関して--- //x座標をステージ右より55px左にする next_btn.x = stage.stageWidth-55; //y座標をステージ下より15px上にする next_btn.y = stage.stageHeight-15; ~~~~~~ //関数 nextClick の定義 function nextClick(evt:MouseEvent):void{ // 写真入り「photo_mc」内を次のフレームに戻して停止 photo_mc.nextFrame(); } 環境はWin XP、Flash CS3、actionscript3、flashplayer9 です。 よろしくお願いします。

  • usk99
  • お礼率68% (15/22)
  • Flash
  • 回答数2
  • ありがとう数3

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

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

「次へ」ボタンを消すだけでしたら, 単純に書かれてある通りにそのままをコーディングすれば良いと思います。  ↓関数 nextClick を変更↓ -------------------------- //関数 nextClick の定義 function nextClick(evt:MouseEvent):void { // 写真入り「photo_mc」内を次のフレームに戻して停止 photo_mc.nextFrame(); // もしそのフレーム↑が「photo_mc」の最終フレームであれば if (photo_mc.currentFrame==photo_mc.totalFrames) { // イベントターゲット(next_btn)を非表示にする evt.target.visible=false; } } -------------------------- しかし, このままだと一度消えた「next_btn」が現れることはありません。 「next_btn」を再出現させるとなるとムービー全体の連動を考える必要があります。  ↓表示/非表示 連動部分の全体例↓ ------------------------------------ // 写真入り「photo_mc」の再生を停止 photo_mc.stop(); // 前へボタン「prev_btn」を非表示にしておく prev_btn.visible=false; // 次へボタン「next_btn」にクリック時のイベントリスナーを登録 next_btn.addEventListener(MouseEvent.CLICK,nextClick); //関数 nextClick の定義 function nextClick(evt:MouseEvent):void { // 写真入り「photo_mc」内を次のフレームに戻して停止 photo_mc.nextFrame(); // もしそのフレーム↑が「photo_mc」の最終フレームであれば if (photo_mc.currentFrame==photo_mc.totalFrames) { // イベントターゲット(next_btn)を非表示にする evt.target.visible=false; } // 前へボタン「prev_btn」を表示する prev_btn.visible=true; } // 前へボタン「prev_btn」にクリック時のイベントリスナーを登録 prev_btn.addEventListener(MouseEvent.CLICK,prevClick); //関数 prevClick の定義 function prevClick(evt:MouseEvent):void { // 写真入り「photo_mc」内を前のフレームに戻して停止 photo_mc.prevFrame(); // もしそのフレーム↑が「photo_mc」の最初のフレームであれば if (photo_mc.currentFrame==1) { // イベントターゲット(prev_btn)を非表示にする evt.target.visible=false; } // 次へボタン「next_btn」を表示する next_btn.visible=true; } ------------------------------------ 取得したり操作したりするプロパティは次の3つです。 currentFrame MC(ムービークリップ)の再生中フレームプロパティ totalFrames MCのフレーム数(=最終フレーム番号)プロパティ visible MCやボタンなどの 表示/非表示 プロパティ あとは, 「いつ」・「どうしたいか」 を考えながら場合に応じてコーディングします。  

usk99
質問者

お礼

度々ご丁寧にご解説いただきありがとうございます。 ただ僕のやり方が間違っているのか、 下記のようなエラーが出てしまいます。。 関数の定義が重複しています。 function nextClick(evt:MouseEvent):void { function prevClick(evt:MouseEvent):void { お分かりになりますでしょうか?

その他の回答 (1)

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

#1です 補足を拝見しました。 > 関数の定義が重複しています。 > function nextClick(evt:MouseEvent):void { > function prevClick(evt:MouseEvent):void { それは文字通り(エラーメッセージ通り) function nextClick と function prevClick を二重(または三重 以上)定義しているからでしょう。 日本語のエラーメッセージくらい理解してくださいよ。 同じ関数名の関数を同じフレームにコピペして増やしてもダメです。 (仮にエラーが出なくても最後に定義した同名の関数しか有効になりません。) スクリプトを変更するか, 元あった同じ関数名の関数を削除して#1で書いた2つのスクリプトのうちどちらかコピペで使用するとかしないと...。

関連するQ&A

  • FLASH:: ブラウザ領域にあわせて背景をリサイズ、その後固定

    FLASH:: ブラウザ領域にあわせて背景をリサイズ、その後固定 FLASH:: ブラウザ領域にあわせて背景をリサイズ、その後固定 WEBほぼ初心者ですが、ネットで検索しながら、フルフラッシュの可変レイアウトサイト作成に挑戦中です。 ステージは1920x1200、scaleModeはNO_SCALE, TOP_LEFTアラインです。 やりたいことは、最初にサイトに入った時のstageWidth,stageHeightにあわせて背景BG_mc(1920x1200です)を拡大・縮小し、以後もしウインドウサイズが変更になっても、そのサイズを維持させることです。 現状どうにかたどりついたスクリプトでは、近いことはできているのですが、問題が2つあります。 1: 初回アクセス時にBG_mcのリサイズが適用されず、元のサイズででてしまう。   いったんブラウザをリサイズすると、以後はリサイズが適用され続けます。 2: ブラウザサイズが変更されると、リサイズが動的に適用されつづけてしまう。 最初に拾ったサイズでBG_mcを固定して、以後ブラウザのリサイズは無視したいのですが・・。 下記がそのスクリプトです。 使用ソフトはFLASH CS4, AS3,現状ではGoogle Chromeのみでパブリッシュしてテストしています。 stage.addEventListener(Event.RESIZE, resizeListener); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; //var DispX:int = Capabilities.screenResolutionX; //var DispY:int = Capabilities.screenResolutionY; function resizeListener (event:Event):void { trace("stageWidth: " + stage.stageWidth + " stageHeight: " + stage.stageHeight); BG_mc.width = stage.stageWidth; BG_mc.height = stage.stageHeight; //if (stage.stageWidth > stage.stageHeight) { //BG_mc.width = stage.stageWidth; //BG_mc.height = stage.stageWidth*0.625; //} else { //BG_mc.width = stage.stageWidth; //BG_mc.height = stage.stageWidth; //} } どなたかわかる方、いらっしゃらないでしょうか? そもそもやろうとしていることは、Flashのみで可能なのでしょうか? レイアウトはHTMLを活用したほうがよいのでしょうか? よろしくお願いします。

  • ボタン

    以下のようなスクリプトで、写真のメニューを作っています。 画像の読み込みまでは、うまくできたのですが、ボタンにする ところでつまづいています。 以下のスクリプトでは、どのボタンをクリックしても、変数mに10が代入されているため、10.jpgがphoto_mcに表示されてしまいます。どのようにすれば、 menu1_mcをクリックすれば、1.jpg、 menu2_mcをクリックすれば、2.jpg、 menu3_mcをクリックすれば、3.jpg・・・ のようになるのでしょうか?説明が下手で申し訳ありません m(_ _)m i = 10; /*trace(i);*/ for (y=0; y<10; y++) { m = y+1; obj = this.attachMovie("menu", "menu"+m+"_mc", y); obj._x = 30; obj._y = 70*y+10; /*画像読み込み*/ name = "menu"+m+"_mc"; this[name].photo_mc.loadMovie("photo/"+m+".jpg this[name].photo_mc._xscale = 15;//% this[name].photo_mc._yscale = 15;//% /*ボタン化*/ this[name].onRelease = function() { _root.photo_mc.loadMovie("photo/"+m+".jpg"); }; } 環境はFlashCS3、ActionScript2.0です。 よろしくお願いします。

  • AS3でステージのサイズ変えた時にムービークリップが減速して中央に移動

    AS3でステージのサイズ変えた時にムービークリップが減速して中央に移動するFlashの作り方で悩んでいます。 参考にしてるものはこれなんですが↓ http://hfm-kenchan.com/Lesson/sample/centermovie11/top.htm これをActionScript3で作ろうと今現在このようにコーディングをしています。 ※my_mc:ステージ中央にあるムービークリップ stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE, resize_control); function resize_control(eventObject:Event):void { my_mc.x = (stage.stageWidth - my_mc.width)/2; my_mc.y = (stage.stageHeight - my_mc.height)/2; const spd:Number=1/5; my_mc.addEventListener(Event.ENTER_FRAME, center_movie); function center_movie(event:Event):void { my_mc.x += ((stage.stageWidth - my_mc.width)/2 - my_mc.x)*spd; my_mc.y += ((stage.stageHeight - my_mc.height)/2 - my_mc.y)*spd; } } 現在はリサイズするとmy_mcはステージ中央にいるのですが参考にしてるものみたいに減速して中央に移動するというものが作れません。 どうしたらいいのかどなたかアドバイスしていただけませんか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • ボタンのカウント数でムービークリップの位置が変わるギャラリーの作り方

    いつもお世話になっております。 初めて質問させていただきます。 Flashは初心者です。 現在、写真のギャラリーを制作しております。 下記のようにサムネイルを下1列に並べ、上に写真を表示する形です。   ┌─────────┐   │         │ D  │  C    B  │A   │         │   │ ○ ○ ○ ○ ○ │   └─────────┘ ○→ボタン ボタン1を押すと、写真1がAの位置からBの位置へ移動。 ボタン2を押すと、写真1がBの位置からCの位置ヘ移動。 そして、写真2がAの位置からBの位置へ移動。 ボタン3を押すと、写真1はCの位置からDの位置へ移動し、 ステージ上から見えない状態に。 写真2はBの位置からCの位置ヘ移動。 写真3はAの位置からBの位置へ移動。 このようなものを制作しようとしています。 【ややこしい説明で申し訳ございません】 現在、 photo_mcというムービークリップの1フレームごとに、 写真1,2,3を入れて、ボタンのアクションスプリクトに on(press){ //ムービークリップを複製し、指定の位置に配置// obj = _root.attachMovie("photo_mc", "mc01", 1); obj._x = 390; obj._y = 0; //商品画像の決定// _root.mc01.gotoAndPlay(3); } を記入しており、 ボタンをクリックすると、選択したボタンの画像が 指示した場所に表示される、という状態です。 この先の処理にいきづまっております。 ボタンが押されたらrootにおいてあるcountに1を加算 ↓ countにある数字をphoto_mcが取得(?) ↓ その数字に応じて動くどの位置に行くか判断し、移動 というように動かそうとしているのですが、 最初のカウントに1を加算というところでつまづいており、 その先も、可能なのかどうかすらわからない状態です。 なにか別に良い方法があれば、ご教授いただければ幸いです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • removeChild()についてご教授願います。

    AS3.0の初心者です。 Stratボタン、Stopボタンで以下のスクリプトで表示と非表示を繰返ししたいのですが、 Stopボタンで、単にremoveChild();にしますと、 「#2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」 とエラーとなります。 色々と調べてみたのですが、よく判判りません。 Stopボタンの記述をどの様にすればよいのでしょうか? 初歩的質問で大変恐縮ですが、どうかご教授お願い致します。 [メインスクリプト] var stageH = stage.stageHeight; var stageW = stage.stageWidth; //Stratボタン start.addEventListener(MouseEvent.MOUSE_DOWN,gene); function gene(e:Event):void { for (var i = 0; i < 20; i++) { var mc:Candy = new Candy(); mc.x = Math.random()*stageW + 10; mc.y = Math.random()*stageH + 10; addChild(mc); } } //Stopボタン stop.addEventListener(MouseEvent.MOUSE_DOWN,stp); function stp(e:Event):void { removeChild(mc); この部分がよく判らないのですが、 どの様に記述したら良いのでしょうか? } --------------------------------------- [mc のスクリプト] var mcH:int = this.height; var mcW:int = this.width; var stageH = stage.stageHeight; var stageW = stage.stageWidth; var speedY:uint = Math.random() * 5 + 5; var speedX:uint = Math.random() * 2; addEventListener(Event.ENTER_FRAME,loop); function loop(Event):void { y += speedY; x += speedX; if ( y > stageH ) { y = - mcH; } if ( x > stageW ) { x = - mcW; } } -----------------------------------------

    • ベストアンサー
    • Flash
  • atttachmovie で配置エリアの限定

    actionscript 初心者です。 for文の中で var x:Number = Math.floor(Math.random()*1000)-500; var y:Number = Math.floor(Math.random()*650)-325; _root.space.attachMovie("btn_mc1", "btn_mc"+i,0-i, init); _root.["btn_mc"+i]._x = x; _root.["btn_mc"+i]._y = y; というスクリプトで、btn_mcというmcをランダムに配置しています。 (このスクリプト、間違っているかもです。すみません) 配置位置は今1000px×650pxのステージ中でランダムになっているのですが これを、このステージいっぱいの楕円形があると仮定して その中にだけ、配置するということをスクリプトでできるでしょうか?? つまり、mcがぼんやりと楕円形に集まっている。。というような状態に したいのです。 楕円のマスクをかける、という方法ですと、mcが欠けてしまい、 見栄えがよろしくないです。。 よろしければ、お教えいただけると、幸いです。 お願いいたします m(__)m

    • ベストアンサー
    • Flash
  • mcのx座標が50以上になったら次フレーム

    タイトルどおり、 mcのx座標が50以上になったら次フレーム という処理をしたく、 mcに次のアクションスクリプトを記述しました。 onClipEvent(enterFrame){ this._x += 10; } onClipEvent(load){ if(this._x >= 50){ nextFrame(); } } しかし何故か次のフレームに行ってくれません。 どこか間違っているのでしょうか。。。 nextFrame();をgotoAndPlay(2);にしても駄目でした。

    • ベストアンサー
    • Flash
  • 画像のランダム配置からボタンクリックでまとまる

    「ロールオーバーで下画像を表示させる」という質問の回答がありました。 同じような設定で、ステージを400x400、mc0~mc15をランダムに並べておき 別に置いたボタンをクリックすると正しい座標位置へゆっくり移動し、ひとつの 写真にできあがるというのを作りたく思います。 mc0~mc15は写真をスライスした画像100x100です。 ご教授願います。

    • ベストアンサー
    • Flash
  • もう少しでは無いかと思うのですが・・・(長文です)

    初めまして この度Flash8で仕事を始めて行っており、 本などを拝見しながら少しずつは前進しておりましたが とうとう解らなくなり、こちらへの投稿となりました。 ****************************************************** ・現在行っている作業内容をご説明いたします。 画像が3枚・ボタンが「進む」「戻る」1つずつ ボタンを押下した際に画像が切り替わります。 画像名:1枚目「weddingA_mc」 2枚目「weddingB_mc」 3枚目「weddingC_mc」 ボタン名:「next_btn」「back_btn」 ・例えば「next_btn」を押した時に 「weddingA_mc」から「weddingB_mc」へ切り替わります。 その際に単純に画像が切り替わるのでは無く だんだん透明になって行き次の画像に変わると言う事 をしたいのですが・・・(アルファ値を35に設定してます。) ******************************************************** メインのタイムラインに記述しておりますActionScriptです。 var target_mc:MovieClip = weddingA_mc; terget_mc.stop(); var loop:boolean = true; var naviObj:NaviFrame = new NaviFrame(terget_mc, loop); next_btn.onPress = function() { naviObj.next(); }; back_btn.onPress = function() { naviObj.back(); }; ********************************************************** 次に本を参考にしたのですがカスタムクラスのNaviFrameクラス を書きました。 ActionScriptファイルを作り、先ほどのムービーファイルと 同じ階層に保存しました。 下記がそのActionScriptです。 class NaviFrame { var mc:MovieClip; var loop:Boolean; } //コンストラクタ function NaviFrame(target_mc:MovieClip,loopMode:Boolean) { mc= target_mc;  loop = loopMode; } // //次のフレームへ移動する function next() { if(mc.currentframe == mc._totalframes) { //ループするなら先頭のフレームへ戻る if (loop) { mc.gotoAndStop(1); } }else{ //次のフレームへ移動して止まる mc.nextFrame(); } } //手前のフレームへ移動 function back() {   if (mc._currentframe == 1) {     //ループするならば最終フレームへ戻る     if (loop) {       mc.gotoAndStop(mc._totalframe) ; }   }else{ //手前のフレームへ移動して止まる   mc.backFrame(); } } こちらを動かしてもぐるぐるループするだけで 何も動かず延々回っている状態です。 どなたかご意見・ご指南いただければと思っております 何卒、宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • if文について(初心者です)

    初めて書き込みさせて頂きます。 flashに興味を持ち、現在、独学にて学習をしております。 このような初歩の質問で、大変恐縮ですが、 ご教授頂ければ嬉しく思います。 ------------------------------------------------------------- シーン1のステージ上に、 ムービークリップ「photo_mc」(400x1000)を配置し、 マスク(400x350)をかけ、見える範囲を指定しました。 ボタンを2つ作成し、上下にMCが動くようにしました。 MCを上に移動させる為のボタンに、以下のスクリプトを書きました。 on (press) { photo_mc._y -= 70; //ボタンを押す度、photo_mcのy値を70引く trace(text_mc._y);  //yの値を出力、表示 if(photo_mc._y >= -850){ //もしphoto_mcのy値が-850か大きければ photo_text_mc._y -= 0; //photo_mcのy値を変化させない } } プレビューにて確認しますと、移動はしてくれるのですが、 ボタンを押していくと止まらずに、 そのまま上へどんどん移動してしまいます。 y軸の値の指定が、上手くできていないのでしょうか、、。 また、ひとつ考えたものとして、 y軸の値が指定した値になったら、ボタンそのものの機能を停止させる 、というスクリプトはあるのでしょうか、、。 "delete ~"など、使えないものかな、、と考えておりました。 本当に、情けない質問ではありますが、宜しくお願い致します。 長々と、失礼致しました。

専門家に質問してみよう