ActionScriptでのシーンの結合と指定方法について

このQ&Aのポイント
  • ActionScriptを使用して、複数のシーンを結合してひとつのフレームにする方法について教えてください。
  • また、ActionScriptでシーンの指定方法についても質問があります。ボタンではなく、残り日数に応じて指定したシーンに飛ばすことは可能でしょうか?
  • 具体的な実装方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

シーンに関してふたつ質問があります。

はじめまして。 現在ActionScriptを勉強中なのですが、ここの掲示板を見てもわからない部分があった為質問させてください。 1、シーンの結合 一連の流れをわかりやすくするため、いくつかのシーンをわけて作業していました。 これらのシーンをひとつのフレームに繋げる事はできるのでしょうか? 例)「シーン1」の最終フレームの続きに「シーン2」、「シーン2」の最終フレームの続きに「シーン3」を繋げる。 いくつか試してみたのですが、多数のフレームを一度にコピペは出来ない上に、ひとつのフレームだけコピペしても1フレーム目から配置されてしまい最終フレームの後に持っていくのですべてやろうとすると手間がかかりすぎでした。 2、ActionScriptでのシーンの指定方法 ボタンで飛ばす方法の質問はあったので、それを見つつ試したのですができませんでした。 私がやろうとしている事は、ボタンが押されたら飛ばすのではなく、ActionScriptでイベント開催日からの残り日数を計算し、その残り日数に応じて指定したシーンに飛ばす。というものです。 同じタイムライン上の指定したフレームに飛ばす事はできたのですが、別のシーンに飛ばそうとすると止まってしまいます。 ボタンでないとシーンを指定して飛ばす事は出来ないのでしょうか? シーン1の最終フレームに以下のActionScriptを記述してあります。 ※main2などは、それぞれのシーンの1フレーム目にフレームラベルとして同一の物を書いてあります。 this.stop(); dtObj=new Date(); dd=dtObj.getDate(); eventDay=31; dayCount=eventDay-dd; if(dayCount>3){ gotoAndPlay( "シーン2".main2); } if(dayCount=3){ gotoAndPlay( "シーン3".main3); } if(dayCount=2){ gotoAndPlay( "シーン4".main4); } if(dayCount=1){ gotoAndPlay( "シーン5".main5); } よろしくお願いします。

  • stela
  • お礼率50% (1/2)
  • Flash
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

まず、シーンの結合についてですが。 タイムラインでどこか一箇所(どこでも構いません)を選択した状態で、右クリック( Mac では control +クリック)でメニューを出します。 この中から「すべてのフレームを選択」を選ぶと、全てのレイヤーに含まれるフレームを、一度に全部選択することができます。 続けて「フレームのコピー」を選び、結合したいシーンの最後のフレームを選択した状態で同じく右クリックのメニューを出し、「フレームのペースト」を選択してください。2つのシーンを簡単に結合できます。 コピー元のシーンは不要になりますから、「シーン」パネル(「ウィンドウ」メニュー、MX 2004 ではその中の「デザインパネル」の中にあります)で削除しておくといいでしょう。 ------------------------ gotoAndPlay には、シーンを移動できるものとできないものの2種類があります。 シーンの移動は、メインのタイムラインのフレームか、ステージに配置したボタンシンボルのインスタンスでのみ、利用できます。 メインのタイムラインに設定しているのにシーンの移動ができないとなると、スクリプトの方に問題があることになります。 よくあるのが、シーンの名前が間違っている場合です。 シーンを追加すると、「シーン 1 」「シーン 2 」というように、仮の名前が付いたシーンが挿入されます。 この名前が意外にクセモノで、”シーン”の文字と番号の間には半角のスペースが入っています。 また、番号は半角の数字です。 番号を全角にしたり、半角のスペースが抜けていると、移動先のシーンが見付からないことになり、正常に移動できません。 シーンの名前は「シーン」パネルで予め分かりやすい名前に変えておくと、間違いも少なくなります。 ご質問文のスクリプトでは、  gotoAndPlay( "シーン2".main2); となっていますが。 例えばシーン 2 のフレームラベル” main2 ”のあるフレームに移動する場合のスクリプトは、  gotoAndPlay( "シーン 2" , "main2" ); このようになります。 シーンの指定とフレームラベルの指定の区切りがカンマ( , )ではなくピリオド( . )になっている点と、フレームラベルを " " でくくっていない点がまず1つの原因です。 それから、変数 dayCount の値がある値であるかどうかを判断する場合は、  if( dayCount == 3 ) このように、イコール( = )を2つ続けて書きます。 イコールが1つの時は、値を変数に代入するという意味になります。 例えば、  dayCount = eventDay - dd; これは、変数 eventDay の値から dd の値を引いた結果を dayCount に入れる、という意味になっています。 以上の点を確認してみてください。

stela
質問者

お礼

ご返事どうもありがとうございます。 指摘された点を修正して試してみたところ無事動きました。 こんな基本的な部分が間違っていたとは・・・ おかげさまでシーンを利用したFLASH作成が格段に楽になりました! これからももっと勉強して知識を増やしていきたいと思います。 あと、動作環境を書かずにどうもスミマセンでした。 質問の事ばかりで、すっかり頭から抜けていました。 (ちなみにMX2004、WINでした。) 今後質問する場合は気を付けたいと思います。 DPEさん本当にありがとうございました。

関連するQ&A

  • ActionScriptの基本的な部分で困っています。

    はじめまして。 現在、指定の日にちがきたら画像の表示が変わるFLASHを作成しているのですが、思ったように動いてくれなくて困っています。 内容としては、 12日(日)がイベント日なので、13日以降は画像を変更したいのです。そこで、以下のように記述したのですが思ったように動いてくれません。 表示はされるのですが、日付変更スクリプトが動いていないようで、PCの日付を13日以降にして確認しても、2フレーム目の画像が表示されてしまいます。 ━━━1フレーム目内容━━━ mytoday = new Date(); dayCount = mytoday.getDate(); if(dayCount<13){ gotoAndPlay("2"); } if(dayCount>=13){ gotoAndPlay("3"); } ━━━━━━━━━━━━━ ※2フレーム目に12日まで表示させる画像、3フレーム目に13日以降に表示させる画像を配置してあります。 また、2、3フレーム目には、それぞれstop();を記述してあります。 間に合うならば、今週末から使用したいので早めに回答をいただけると助かります。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • Flash8でシーン移動ができない

    Flash8Basicを利用しています。 初歩的な質問で恐縮なのですがシーンの移動ができなくて困っています。過去ログを検索して色々試してみましたがどうしてもうまくいきません・・・。 シーン2に配置したボタンをクリックするとシーン2から「design」というシーンの「s3」というフレームに飛ぶようにしたいのです。 シーン「design」は挿入から作成したものです。 ボタンをrootに配置し、ボタンにアクション  on (release) { gotoAndPlay("design","s3");  } と記載しています。 どなたかアドバイスよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • suzukaのスクリプトで

    suzukaでFlashを制作しております。 プログラムはさっぱりなので検索して出てきたactionscriptを切り貼りして試している状況です。 その1.フレームアクションにおいて、キーを押したら特定のフレームまで移動するスクリプトを入れたいので20フレーム目に以下のスクリプトを入れたのですが、どちらも使えませんでした。具体的な解決策はありますでしょうか。 ●[parse error]とエラーが出る this.stop(); on(keyPress ("a")){ _root.gotoAndPlay(21); } ●キーを押しても何も起こらない this.stop(); if(Key.isDown(Key.RIGHT)){ _root.gotoAndPlay(21); } else if(Key.isDown(Key.LEFT)){ _root.gotoAndPlay(31); } その2.フレームアクションの10フレーム目に this.stop(); buttonA.onPress=function(){ _root.gotoAndPlay(11); }; とボタンのスクリプトを入れると、 どこのフレームまで移動しようが 同じボタンへの命令で上書きするまで このボタンへの効果が持続されてしまうのですが、 押した瞬間に後に命令を引き継がせないスクリプトの記述はありますか?

    • ベストアンサー
    • Flash
  • adobeFlashcs5.5でのプレビュー

    おはようございます。当方初心者です。 フラッシュコンテンツのwebサイトを制作しております。 が、作った動画をプレビューするとボタンが効かなくなってしまいます。効かなくなってしまうといってもマウスオーバーに一応反応しますが、激しく点滅しクリックしてもこちらの意図する動きをせず指定したフレームに飛んでくれません。 意図した通りにといってもパソコンはコード通りに動いているためこちらが間違っているのですが、、、 全て効かなくなってしまうわけではないのですが効くボタンと効かないボタンの違いを分析してみても力及ばずわかりません。 添付画像のhomeのレイヤーにいくつかボタンを作り、どのボタンもactionscriptは on(release){ gotoAndPlay(それぞれ指定するラベル) { としています。 アップ、ヒットは指定せずそのまま、オーバー、ダウンはボタンシンボル化された画像を使用しています。効くボタンも効かないボタンも同じです。 しかしプレビューではなくシンプルボタンを有効にして編集した場合には問題なく効いてくれます。 コンパイルエラーには シーン=シーン 1、レイヤー=home、フレーム=1 、行 4 ステートメントは on ハンドラ内でなくてはいけません。 シーン=シーン 1、レイヤー=home、フレーム=1 、行 1 ステートメントは on ハンドラ内でなくてはいけません。 シーン=シーン 1、レイヤー=works、フレーム=16 、行 4 ステートメントは on ハンドラ内でなくてはいけません。 と3つのエラーがでています。 こちらも関係あるのでしょうか、合わせて伺いたいです。 ご教示頂けましたら幸いです。

  • ボタンのアクションについて

    flashの初心者です。 シーン1とシーン2を作り、シーン2の中に、文字&ボタンインスタントを一つのフレームに入れ、モーショントゥイーンをかけました。 そして、その中のボタンインスタントにアクションを入れました。 on (release) {gotoAndPlay(350);} ボタンを押し話したときに、350(シーン2)のフレームへ飛んで再生するように設定しました。 しかし、ちゃんと作動してくれません。 シーン2の205からスタートしてしまいます。 シーン1はフレーム数は145まで入ってます。 よく見ると、この145と205を足すと350になります。 つまり、シーン1からシーン2にかけて350番目と言う様になってしまいます。 だから、アクションを on (release) {gotoAndPlay(495);} にすると、きちんと動いてくれます。 シーンを分けているときは、こう言うように足さないといけないのでしょうか? シーン2の350と言うように設定はできないのでしょうか? on (release) {gotoAndPlay("シーン2"350);} では出来ませんでした。 モーショントゥイーンをかけていない、普通のボタンは、普通に設定(145を足さない)でうまく動いてくれます。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 外部swf(子swf)から、親swfの特定「シーン/フレーム」にリンクをしたい。

    アクションスクリプト初心者です。お力をお貸し下さい、どうぞよろしくお願いいたします。 「親swf」ファイルに、「子swf」ファイルを読み込み、「子swf」のリンクボタンから 「親swf」ファイルの指定「シーン/フレーム」にリンクをしたいのですが上手くいきません。 「親」ファイルのタイムライン上に配置した「ムービークリップ(インスタンス名:tv)」を 外部swf「子swf」に差し替えるスクリプトは ---------- loadMovie("子swf", "tv"); stop(); ---------- と、記述して上手く動いてますが、 「子swf」のリンクボタンから「親swf」の指定「シーン/フレーム」にリンクさせるにはどの様なスクリプトを書けば良いのか?アドバイスをお願いいたします。 ※「親swf」の指定「シーン/フレーム」とは、「子swf」を読み込む前の「シーン/フレーム」 に戻したいのです。 感覚として下記のようなスクリプトを書きましたが、「親swf」の最初のシーン/フレームに 戻ってしまいます。 リンクボタンに記述 ---------- on (release) { loadMovieNum("親swf", 0); _root.gotoAndPlay("指定シーン",フレーム番号); } ---------- どなたか詳しい方アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 複数のクリックボタンにより再生と停止場所を指定する方法

    複数のボタンを用意し、クリックするボタンにより異なるフレーム数で停止たいと思っております。 停止したいフレームごとにstop();を入れると、そこで毎回止まってしまうのでボタン毎に停止場所を指定しようと、以下のように試してみましたが、出来ませんでした。 停止場所をラベルでも指定してみましたが、出来ませんでした。 stop(); _root.next1.onRelease = function() { gotoAndPlay(5); this.stop(10); } _root.next2.onRelease = function() { gotoAndPlay(5); this.stop(20); } どなたかお考えのあるかたご教授いただけますと幸いです。 当方 Flash8 ActionScript2.0 を使用しています。

  • フレームラベルを使った複数指定について

          |1     |5   |10    |15   |20 レイヤー1 |▲*1*   |▲*2* |▲*3*   |▲*4* |▲*5* | レイヤー2 |●>--→|●--→|●>--→|●--→|●--→| レイヤー3 |●>--→|●--→|●>--→|●--→|●--→| レイヤー1にはフレームラベルが記入されています。 1フレーム目のレイヤー2のボタンは on(press){ gotoAndPlay("*1*"); gotoAndPlay("*2*"); } 1フレーム目のレイヤー3のボタンには on(press){ gotoAndPlay("*1*"); gotoAndPlay("*3*"); } としています。 こちらはきちんと正常に意図通りに動きます。 10フレーム目のレイヤー2には on(press){ gotoAndPlay("*3*"); gotoAndPlay("*4*"); } 10フレーム目のレイヤー3には on(press){ gotoAndPlay("*4*"); gotoAndPlay("*5*"); } としてみましたが、こちらは正常に動きません。 指定の仕方としては誤っているでしょうか? もし間違いでしたら正しい指定の仕方を教えてください。

    • ベストアンサー
    • Flash
  • gotoAndPlayでシーンの移動

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

  • Flash、ボタンが動かない!?

    Flashでコンテンツ制作中です。 ボタンが思うとおりに動きません。 まず、シーン1上に、レイヤー10枚400フレームほどでアニメーションを作っています。 まずは、あるボタンをクリックすると、他のフレームに移動するように作っています(移動はすべてフレームラベルをつけて移動しています)。 移動先はアニメーションなのでシンボルでアニメーションクリップ化しています。 そのアニメーションクリップはいくつかのボタンの集合体です。ボタンをクリックするとまた別のフレームに飛ばしたいのですが、うまく出来ません。 ボタン自体が動いていないわけではありませんでした。 on (release) {getURL("http://www.~~/");}にするとちゃんとページを表示します。 on (release) {gotoAndPlay("main");}とすると移動しません。 on (release) {gotoAndPlay("シーン 1", "main");} でもダメでした。 ラベルのスペル間違えではないとした場合、他に何かダメな理由が考えられることはありますか? よろしくお願いします。