FlashのAsctionScript3.0でキーボード操作でフレーム移動する方法

このQ&Aのポイント
  • FlashのAsctionScript3.0を使用して、キーボードを押すと指定したフレームに移動する方法について説明します。
  • キーボード操作によるフレーム移動を実装する際に発生するエラーについて解決策を提供します。
  • フレームラベルが正しく設定されているにもかかわらず、ArgumentError: Error #2109が発生する場合の対処方法を説明します。
回答を見る
  • ベストアンサー

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
  • ありがとう数1

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

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

stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_P1); これがずっと効き続けているから,そういうエラーが出るのでしょう。 ご質問の件に限ったことではなく 動作させ続ける必要がないイベントリスナーは なるべくその都度 removeEventListener で 登録を抹消する方が良いでしょう↓。 stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_P1); function fl_KeyboardDownHandler_P1(event:KeyboardEvent):void { this.gotoAndPlay("P1ending"); stage.removeEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_P1); } 再び必要になれば、 そのときにまた addEventListener をしなおせば良いです。 例えば上の例では、 上のスクリプトを書いたフレーム(シーン P1 の フレーム1?)に戻ってきたときには 自動的に再び addEventListener されるわけですから 普通はこのままで問題ないと思います。 または、 「シーン P1」内のみで this.gotoAndPlay("P1ending"); を実行させるようにするのも1つの方法です↓。 stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler_P1); function fl_KeyboardDownHandler_P1(event:KeyboardEvent):void { if (this.currentScene.name == "P1") { this.gotoAndPlay("P1ending"); } }

tep0607
質問者

お礼

まさに私が求めていた回答そのものでした。 動作はできてもエラー表示がでるとやはりスッキリしませんでしたので。。 解説も分かりやすかったです。ありがとうございました!

関連するQ&A

  • 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
  • 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
  • 2つのプルダウンメニューを使用したフレームラベルへの移動

    はじめまして。 お世話になります。 Flashムービー内で 2つのプルダウンメニューを組み合わせた フレーム移動をさせたいのですが方法がわかりません。 例えば、 1つ目のプルダウン(「A」~「D」までアルファベット順のメニュー)で「A」を選択し、 2つ目のプルダウン(「1」~「9」までの数字順のメニュー)で「1」を選択したら、「A1」というフレームラベルへジャンプするという仕組みを実装したいのですが、方法が分かりません。 プルダウンメニューが一つの場合だと任意のフレームラベルへジャンプさせるという方法は分かるのですが、2つを連動させるというのが、どうしても分かりません。 お教えいただけると大変助かります。 よろしくお願いいたします。

  • gotoAndPlayでシーンの移動

    初心者ですが、よろしくお願いします。 Windows XP / FLASH MXを使用しています。 シーン2に配置してあるボタンをクリックするとシーン1に配置しているMC内にあるフレームラベルへ移動させたいです。 ボタンに下記のように記述してみましたがうまくいきません。 on (release) { _root.movie_mc.gotoAndPlay("menutop"); } ご存知の方いらっしゃいましたら、よろしくお願いいたします。

  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • ボタンをクリックして画面遷移させる方法について

    flash初心者です。 cs4でAS3.0を使っています。 ボタンをクリックするとgotoAndPlayでラベルの指定してあるフレームに飛ぶように設定したいのですが、クリックしても全く反応してくれません。 ボタンは「next」と「top」の2つを画像(ボタンシンボル)で作成しています。 アニメーション後にこの2つのボタンが出て、それぞれをクリックすると別のアニメーションに飛ぶという流れを考えています。 記述したAS3.0は下記です。 --------------------------- stop(); var topBtn01:SimpleButton = new SimpleButton(); var nextBtn01:SimpleButton = new SimpleButton(); topBtn01.addEventListener(MouseEvent.CLICK,top01Click); nextBtn01.addEventListener(MouseEvent.CLICK,next01Click); function top01Click(event:MouseEvent):void{ gotoAndPlay("top01"); } function next01Click(event:MouseEvent):void{ gotoAndPlay("next01"); } ----------------------------------- それぞれのボタンにインスタンス名を「topBtn01」「nextBtn01」とつけています。 ちなみに、エラーは何も出ていません。 ただ、変数を定義しているはじめの2~3行目を抜くと下記のエラーが出ていました。 --------------------------- TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at top_main_fla::MainTimeline/frame251() --------------------------- どうしたら良いか、どなたか教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

    ただ今、下のようなflashを制作しています。 http://www.shoji-yuki.com/index.fla ボタンをクリックすることで、ラベル『nwes』にフレームが移動するようにしたいのですが、 actionレイヤーの1フレーム目に === function go_news(btn1event){ this.gotoAndPlay("news"); } news_btn.addEventListener(MouseEvent.CLICK,go_news); === また、45フレーム目に === this.stop(); === と入力をしたのですが、 出力から 「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at index_fla::MainTimeline/frame1() 」 と、メッセージがでてしまいます。 ネットで調べた所、インスタントが配置されていないのが問題とのことですが、イマイチ良くわかりません。ステージにシンボルを配置しているので、インスタントとして配置していると思います。 どなたか、良き解決方法をご教授ください。 === flash cs4 action script 4.0

    • ベストアンサー
    • Flash
  • キーボードを押した時のムービークリップの動きについて

    キーボードを押した時のムービークリップの動きについて 横スクロールの簡単なFlashゲームを作ろうとしています。 制作環境はWinXP,flashCS4,as3です。 今やりたい事は、キーボードの十字キーを押すことでキャラクターを移動させる、と同時に キャラクターのムービークリップ内に作ってある任意のフレームに飛ばして 歩いているアニメーションを再生させるということです。 「KeyboardEvent」クラスを使って、function に「インスタンス名.x +=3;」という 記述をすることでインスタンスの移動はできました。 ですが、キーボードを押し続けると、アニメーションの作ってあるフレームが 最初のフレームから動かないため、動きがつきません。 キャラクターを移動させると同時に、キャラクターのアニメーションを再生させて動きを つけるにはどういう記述の仕方をしたら良いでしょうか? アドバイスをいただけましたら幸いです。 下記URLが、現在つくっていてうまくいかないものの例です。 http://homepage2.nifty.com/meary/test.html 下記が記述スクリプトです -------------------------------------------------------- //キーダウンしたとき stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); //右矢印キーを押すと右に移動、hitoインスタンスはwalkフレームへ function handleKeyDown(e:KeyboardEvent) { if(e.keyCode == Keyboard.RIGHT) { hito.x += 3; hito.gotoAndPlay("walk"); } }

    • ベストアンサー
    • Flash
  • ムービークリップ再生後次のフレームへ移動しません

    アクションスクリプトを使って、テキストが下から上へ流れるようにムービークリップを再生し、テキストが流れ終わったところで次のフレームへ移動させたいのですが、フレームが移動せず困っています。 スクリプトは色々なところで調べて、やっとの事で下記のように書きました。 使用しているのはFlash MX 2004 です。 |○  □|○|  ←1.スクリプトレイヤー |●    □|  ←2.ムービークリップレイヤー |○|●→|●|  ←3.ムービークリップ後に再生したいレイヤー 1.のスクリプト(2つのキーフレームいずれとも) stop(); 2.のムービークリップのスクリプト onClipEvent (load) { spd =5; onClipEvent (enterFrame) { this._y = this._y-spd; if (this._y<=-10) { spd = 0; gotoAndPlay(2); } } 知り合いにお見舞いのメッセージをと思って作ったのですが、送ることが出来なくてとてもあせっています。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3リンケージ設定したムービークリップの中で、フレーム移動がしたいです。

    初心者です。 AS3で、 リンケージ設定したムービークリップを addChildで呼び出し、 呼び出したムービークリップの中の、 指定したフレームに移動するにはどうしたら宜しいでしょうか。 ステージに配置した場合、インスタンス名を付けて インスタンス名.gotoAndPlay("フレームラベル"); で移動しますが、 リンケージ設定したムービークリップの場合はインスタンス名の代わりに リンケージ名で呼び出せないのですか。

    • ベストアンサー
    • Flash