Flash A.S3.0のシーン移動について

このQ&Aのポイント
  • Flash A.S3.0を使用してシーン移動する方法について説明します。
  • シーン移動時に「Shiftキー」を押すことで前のシーンに戻る機能の追加方法を解説します。
  • 上記のコードを使用して、シーン移動と前のシーンに戻る機能を実装することができます。
回答を見る
  • ベストアンサー

Flash A.S3.0のシーン移動について

今、下記のようなコードでシーン移動を行っています。 ****************************************************************************** stop(); stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_033); function fl_KeyboardDownHandler_033(event:KeyboardEvent):void { MovieClip(this.root).gotoAndPlay("P33end", "P33"); stage.removeEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_033); } ****************************************************************************** これに加えて、 「Shiftキー」を押すことで、ひとつ前のシーンに戻る機能を追加したいのですが どのように記述すべきでしょうか。 ご教示いただければ幸いです。

  • Flash
  • 回答数1
  • ありがとう数1

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

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

「ひとつ前のシーン」の件は少しややこしい(色々な場合がある)のでとりあえず置いておいて 「Shiftキー」を押すことで シーン「P33」のフレーム「P33end」に移動するスクリプトを書きます。 リスナー関数の仮引数(ご質問のスクリプトの場合は「event」)には 発生したキーボードイベントオブジェクトの参照が入ります。 そのキーボードイベントのkeyCodeプロパティを調べると そのキーボードイベントを発生させたキーコードがわかります。 『もしそのキーコードが「SHIFT」キーであれば…』というif文を付け加えれば良いので 次のようになります↓。 //************************************** stop (); stage.addEventListener (KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_033); function fl_KeyboardDownHandler_033 (event:KeyboardEvent):void { if (event.keyCode == Keyboard.SHIFT) { MovieClip(this.root).gotoAndPlay ("P33end", "P33"); stage.removeEventListener (KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_033); } } //************************************** Keyboard.SHIFT は Keyboardクラスの定数です。 このような書き方を知らなくても(ヘルプなどで調べなくても)別にかまいません。 fl_KeyboardDownHandler_033 内に trace(event.keyCode); などと書いて「制御」→「ムービープレビュー」すれば キーコード(コード番号)得られます。 「SHIFT」キーのキーコードは 16 です。 ですから上のコードの if文 の部分を次のように変えても良いです。 if (event.keyCode == 16) ========================= さて「ひとつ前のシーン」です。 上のスクリプトを原型にして 関数名だけを変えて「ひとつ前のシーン」に移動する場合は次のようになります。 //************************************** stop (); stage.addEventListener (KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_034); function fl_KeyboardDownHandler_034 (event:KeyboardEvent):void { if (event.keyCode == Keyboard.SHIFT) { MovieClip(this.root).prevScene(); stage.removeEventListener (KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_034); } } //************************************** この prevScene() ですが これは gotoAndStop(○○) と同じで そのシーンの先頭フレームで止まります。 gotoAndPlay(○○) と同じように シーンの先頭フレームから再生を開始させたい場合は MovieClip(this.root).prevScene(); の後に MovieClip(this.root).play(); と書く必要があります。 ただし この MovieClip(this.root).play(); を付け加えて動作するのは Flash Player 10 以上(要 Flash CS4 以上)のみの場合があります。 この辺は場合(その他の条件)によって変わるので実際にやってみないと何とも言えません。

tep0607
質問者

お礼

お礼が遅くなり申し訳ございません。 ご丁寧にソースを記載していただきありがとうございました! 無事、アクションを設定することが出来ました。感謝です!

関連するQ&A

  • A.S 3.0 キーボードでのフレーム移動

    FlashのAsctionScript3.0で、クリックではなく、キーボードを押すとラベル付きのフレームに飛ぶように設定をしており、このキーボード操作を毎ページで行おうとしています。 が、ArgumentError: Error #2109:というのが出ます。 ソースは stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_P1); function fl_KeyboardDownHandler_P1(event:KeyboardEvent):void { this.gotoAndPlay("P1ending") } というのを、毎シーンの1フレーム目にキーフレームを置いてそこに書いています。 変数名やジャンプ先のフレームラベル名はもちろんページごとに変えています。 ラベル名に間違いはありません。 プレビューで対象のフレームへのジャンプはちゃんと出来ているのですが、 ログで ArgumentError: Error #2109: フレームラベル P1ending がシーン P2 で見つかりません。 at flash.display::MovieClip/gotoAndPlay() at _02TEL_fla::MainTimeline/fl_KeyboardDownHandler_P1() このように出ます。 どうも次のシーンになっても、前シーンで指定したフレームを探そうとしているようだということは分かるのですが このエラーを出さないようにする方法を探しています。 ご教示ください。

    • ベストアンサー
    • Flash
  • マウスアウトで非表示にする

    シーン1に、mc(ムービークリップ)とcomment1(ムービークリップ)を配置 mcにマウスオーバーするとcomment1が表示される。 mcよりマウスアウトするとcommen1が非表示になる。 という感じにしたいのですが、マウスアウトしても非表示に出来ないで困っています。 //----------------------------------- MovieClip(root).comment1.visible = false; var pointX:Number=70; var pointY:Number=50; mc.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); function fl_MouseOver(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunc); function mouseMoveFunc(e:MouseEvent):void { MovieClip(root).comment1.visible = true; MovieClip(root).comment1.x=stage.mouseX+pointX; MovieClip(root).comment1.y=stage.mouseY+pointY; } } mc.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOver2); function fl_MouseOver2(event:MouseEvent):void { mc.removeEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); MovieClip(root).comment1.visible = false; } //-----------------------------------

    • ベストアンサー
    • Flash
  • 【Flash】でタイムラインがうまく動作しません。

    FLASHのgotoAndPlayで飛んだ後に、タイムラインがうまく動作しません。 環境は以下です。 ActionScript 3.0 Flash CS5 Windows7 php 5 具体的には、 (1)スタートボタンがあり、スタートボタンをクリック後、 (2)ランダムに数字を作成。 (3)そこで獲得した数字により、飛ばす先のラベルを振り分け。 (4)飛んだ先のラベルが、どのラベルかをphpファイルへデータ送信。 (5)飛んだ先のラベルで、長めのムービークリップ実行。 しかし1~2秒ムービークリップを実行後、タイムラインの初めに戻ってしまいます。 ラベルへの振り分けも、phpファイルへのデータ送信もうまくいっております。 しかし、(5)だけがなぜかうまく動作しません。 下記がスクリプトでございます。 皆様ご多忙かと存じますが、 修正点等がございましたら、ご教授頂ければ嬉しく思います。 ---------------------------------------------------- stop(); startButton.addEventListener(MouseEvent.CLICK, clickBtn); function clickBtn(e:MouseEvent){ var v:int = Math.ceil(Math.random()*19)+1; var url:String = "http://●●●"; var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.detail = v; request.data = variables; request.method = URLRequestMethod.POST; navigateToURL(request, "_self"); function completeHandler(evt:Event):void{ var re_variables:URLVariables = new URLVariables( evt.target.data); trace(re_variables.comp); } if (v>15) { MovieClip(root).gotoAndPlay(2); } else if (v>11) { MovieClip(root).gotoAndPlay(3); } else if (v>7){ MovieClip(root).gotoAndPlay(4); } else if (v>4){ MovieClip(root).gotoAndPlay(5); } else { MovieClip(root).gotoAndPlay(6); } } 以上でございます。 皆様のお知恵を拝借できれば幸いでございます。 何卒よろしくお願い申し上げます。

    • ベストアンサー
    • Flash
  • フラッシュのマウスイベント

    フラッシュのマウスイベントがうまくいかないので教えてください。 ボタンはい列(5個)をしてそれぞれにインスタンスを付けました。 ロールオーバーで背景画像の入れ替えクリックで特定のURLへ飛びたいのですが 飛ぶことはできてもロールオーバーの記述がうまくいきません どう書けばいいのか教えてください 素人で説明見ながらなのでイフ とかエルスの使い方もよくわかりません。 ちなみに下記はクリックしたら出てきた記述で思い通りに動いています。 できたら出てくる画像がフェードインにしたいです 同じタイムラインに画像を配置してそれぞれMC-1とか名前も付けましたが 記述を探しても全くわかりません よろしくお願いします URL1.addEventListener(MouseEvent.CLICK,fl_ClickToGoToWebPage_5); function fl_ClickToGoToWebPage_5(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL2.addEventListener(MouseEvent.CLICK,fl_ClickToGoToWebPage_6); function fl_ClickToGoToWebPage_6(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL3.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_7); function fl_ClickToGoToWebPage_7(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL4.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_8); function fl_ClickToGoToWebPage_8(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL5.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_9); function fl_ClickToGoToWebPage_9(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); }

  • 関数をストップさせるには。。。。

    エラー1061に関しまして b1.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOverHandler); function fl_MouseOverHandler(event:MouseEvent):void { moveMM.stop(); moveMC.stop(); } とやると、「未定義である可能性のあるメソッドstop~」 と出てしまいます。どう修正すればいいでしょうか??

    • ベストアンサー
    • Flash
  • Error#1009 時計のシーン移動ボタン

    こんにちは、Flash初心者です。 アクションスクリプト3.0にて、時計を作っています。 時計は完成したものの、シーンを移動するボタンを作成したところ、 TypeError: Error #1009: Cannot access a property or method of a null object reference. at sushi_fla::MainTimeline/updateDate2()[sushi_fla.MainTimeline::frame4:13] このようなエラーメッセージが出てきました。 ■1フレーム目■ 1フレーム目のプログラムにTOPに戻るボタンのプログラムを記載しています。 top2nd_btn.addEventListener(MouseEvent.CLICK, fl_top22); function fl_top22(event:MouseEvent):void { gotoAndPlay(1,"TOP"); } ■2フレーム目■ プログラムソースは、下記の通りで、2フレーム目に記載しております。 //時計のプログラム addEventListener(Event.ENTER_FRAME, updateDate2); function updateDate2(event:Event):void { //Dateクラスの設定 var dateObj = new Date(); //時間 tanshin2_mc.rotation = dateObj.hours*360/12 + dateObj.minutes*360/12/60; //分 choshin2_mc.rotation = dateObj.minutes*360/60 + dateObj.seconds*360/60/60; //秒 secondhand2_mc.rotation = dateObj.seconds*360/60 + dateObj.milliseconds*360/60/1000; } //この画面でストップ stop(); このソースでタイムラインの秒針Byoshin・長針Choshin・短針Tanshinの3つを動かしております。 (Bisuやバックグランドは飾りです) アドビヘルプだと、Null にプロパティがないそうですが、時計は、永遠に回り続けるため、一つのフレームでアクションが完結することがありません。 その為、フレームを変えてもうまく行きませんでした。 初心者でどこが駄目なのかわからず、泣きそうです。 お分かりになる方がおりましたら、お知らせくださいませ。 どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FLASH/一定時間停止後、再生されるscript

    flash CS4/ActionScript3.0にてサイトローテーションバナーを制作しております。 ムービークリップ「btn1_mc」をクリックするとフラッグ「scene1」を再生し、 「btn1_mc」にポインタが乗った時は一定時間停止し、再生されるという動きを作りたいのですが、初心者のため、うまくActionScriptが書けません。 setTimeout関数を使えば良いということはわかったのですが… 下記コードに書き加え、実装する方法を教えていただければ助かります。 よろしくお願いします。 btn1_mc.addEventListener(MouseEvent.CLICK,btn1Click); btn1_mc.addEventListener(MouseEvent.ROLL_OVER,btn1Over); btn1_mc.addEventListener(MouseEvent.ROLL_OUT,btn1Out); btn1_mc.buttonMode=true; function btn1Click(evt:MouseEvent):void{ gotoAndPlay("scene1"); } function btn1Over(evt:MouseEvent):void{ gotoAndStop("scene1"); btn1_mc.gotoAndStop(2); } function btn1Out(evt:MouseEvent):void{ gotoAndPlay("60"); btn1_mc.gotoAndStop(1); }

  • AS3.0による外部swfの制御

    AS3.0による外部swfの制御 質問させていただきます。 やりたいと事は、メインとなるswfのボタンを押して、 読み込んだ外部swf(stopしている)を再生(play)したいと考えております。 メインのswfはAS3.0、読み込む外部swfはAS2.0になります。 環境はFlash CS3です。 以下がスクリプトになります。 //swf読み込み配置 var loader_obj : Loader = new Loader(); var url : URLRequest = new URLRequest("test.swf"); MovieClip(root).loader_obj.load(url); loader_obj.y = 3 loader_obj.x = 392 stage.addChild(loader_obj); //swfボタン制御 btn.addEventListener(MouseEvent.ROLL_OVER,btn_play); function btn_play(event:MouseEvent):void {MovieClip(root).photo.gotoAndPlay(2);//メインswfのムービーリップも動かす <--ここに外部swfを参照するスクリプトが入ると思うのですが・・・-->gotoAndPlay(2);//外部swfの2フレーム目から再生 } 肝心の所のスクリプトはわかりません・・・ 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • AS3のコードをシンプルに

    AS3のコードについてご教授お願いします。 下記のようなコードがあるとします。 btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); function aClick(e:MouseEvent):void { this.gotoAndPlay("A"); // trace("Aclick"); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); btnA_mc.removeEventListener(MouseEvent.CLICK,aClick); } function bClick(e:MouseEvent):void { this.gotoAndPlay("B"); // trace("Bclick"); btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); btnB_mc.removeEventListener(MouseEvent.CLICK,bClick); } function cClick(e:MouseEvent):void { this.gotoAndPlay("C"); // trace("Cclick"); btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.removeEventListener(MouseEvent.CLICK,cClick); } btnA_mc.buttonMode = true; btnB_mc.buttonMode = true; btnC_mc.buttonMode = true; この中の、 btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.removeEventListener(MouseEvent.CLICK,cClick); のような、重複する部分を、配列か何かでまとめたいのですが、いまいち方法が分かりません。 ボタンAをクリックで、ボタンAは効かなくなる。ボタンBorCをクリックでボタンAが復活みたいな感じです。 宜しくお願いします。 flashCS3 ASはver3.0でお願いします。

    • ベストアンサー
    • Flash
  • マウスでドラッグして絵を描くSWFを作っています

    マウスでドラッグして絵を描くSWFを作っています ムービークリップ"masu"を置き、 下のスクリプトで、マウスのボタンを押してしてそのままマウスを動かすと動きに沿って線は引かれ、hの値も正しくトレースされるのですが、ボタンをあげても TypeError: Error #1034: 強制型変換に失敗しました。flash.events::MouseEvent@2ac45ea1 を fl.motion.MotionEvent に変換できません。 というエラーが出力され、 function DEL(eventObject:MotionEvent):void{ removeEventListener(MouseEvent.MOUSE_MOVE,LINE); } が動きません。なぜでしょうか? また、AS1は少しはわかりますがAS3は初心者ですので、もっとよいスクリプトなどありましたら挙げていただけるとうれしいです import fl.motion.MotionEvent; var h = 1; this.masu.addEventListener(MouseEvent.MOUSE_DOWN,MOVE); this.masu.addEventListener(MouseEvent.MOUSE_UP,DEL); function MOVE(eventObject:MouseEvent):void{ this.masu.graphics.moveTo(mouseX,mouseY); this.masu.addEventListener(MouseEvent.MOUSE_MOVE,LINE); } function LINE(eventObject:MouseEvent):void{ h++; trace(h); this.masu.graphics.lineStyle(3,0x000000); this.masu.graphics.lineTo(mouseX,mouseY); } function DEL(eventObject:MotionEvent):void{ removeEventListener(MouseEvent.MOUSE_MOVE,LINE); }

    • ベストアンサー
    • Flash