• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:flashランダム処理 5秒ごとにどれかを表示する)

Flashランダム処理で非表示のシンボルを表示する方法

このQ&Aのポイント
  • Flashを使用して、5秒ごとに非表示のシンボルの中からランダムに1つ表示する方法について教えてください。
  • シンボルの初期状態はすべて非表示に設定されていますが、5秒ごとにランダムに1つを表示させたいです。
  • タイムラインを使用せずにこの処理を行う方法があれば教えてください。もしくは、他の処理でタイムラインを使用しつつ、問題を解決する方法があればお教えください。

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

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

5秒ごとに、今表示しているムービークリップを非表示にして、次に表示するものを選んで表示する・・・という処理を専門に行うムービークリップを1つ作っておくのはいかがでしょう。 タイマーの処理は、onClipEvent( enterFrame ) を利用して作ります。インスタンスにアクションを設定しますから、このインスタンスをステージに置いておくだけで、メインのタイムラインとは関係なくタイマーの処理が行われます。 例えば、タイマー処理を行う timer というムービークリップと、表示するムービークリップ clip1 ~ clip7 があるとします。 clip1 ~ clip7 は、_alpha を0にするか、もしくは _visible を false にして、非表示にしておきます。 最初の1回だけは、メインのタイムラインにフレームアクションを設定するか、ムービークリップ timer の onClipEvent( load ) イベントを利用して、clip1 ~ clip7 の中から、表示するムービークリップをランダムに選びます。そして変数を1つ用意し、選んだムービークリップの名前を保存しておきます。これは、5秒後に違うムービークリップを表示する時に、現在表示中のムービークリップを非表示にする処理で必要になります。 timer のムービークリップは、絵は適当に描くか、または全くなくても構いません。絵があった方が作る時には分かりやすいですが、本番ではこれも非表示にします。 5秒のインターバルタイマーの作り方は、あまりスマートな方法が思いつかず、いささか鈍くさい方法で申し訳ないのですが... ムービーが再生されてからの経過時間を返す、getTimer という関数があります。単位はミリ秒なので、1000 で割ることで秒に直すことができます。5秒=5000ミリ秒ですから、これを利用して5秒間を計ることにします。 ロードにかかった時間など、カウントされてはいけない時間はとりあえず考慮しないことにすると、理論的には、getTimer で取得した時間を 5000 で割った余りが0になる時が、5秒ごとの間隔となります。つまり、5秒のインターバルタイマーとは、  if ( (getTimer() % 5000) == 0 )  {   ・・・  } になるような気がします。 しかし実際は、フレームレート等の関係で、getTimer で、経過時間が 5000 の倍数になる瞬間を逃さず捉えられるという保証はありません。ですから、剰余がきっちり0になった時にだけ何かをするというのは、まずアテにできないと考えた方が良さそうです。 そこで、常に1フレーム前での経過時間と現時点での経過時間の差をとって別の変数に加算していく、という方法を考えてみました。(この辺りが、ちょっとヘッポコ ^^;) まず、変数を2つ用意して、1つの変数には1フレーム前での経過時間を保存しておきます。すると、現在の経過時間と1フレーム前の経過時間の差で、どのくらいの時間が経過したかが分かります。この差を、もう1つの変数に蓄積していきます。この、蓄積された差が 5000 以上であれば、5秒経ったと見なすことができます。数ミリ秒の誤差が生じますが、そこはご勘弁を。 この方法で組むなら、ムービークリップ timer に設定するスクリプトは、こんな感じでしょうか。  onClipEvent(enterFrame)  {   var clip_no , clip_name , timer;   //前のフレームでの経過時間との差をとり、   //累積の差を記憶しておく   timer = getTimer();   _root.def_time += timer - _root.before_time;   //現在の経過時間を保存   _root.before_time = timer;   //累積の差が5000以上になったら5秒経過したと見なし、   //表示するムービークリップを選ぶ   if(_root.def_time >= 5000)   {    clip_no = Math.floor((Math.random()*7)+1);    clip_name = "_root.clip"+clip_no;    //今表示しているムービークリップを非表示にする    eval(_root.disp_clip)._visible = false;    //選択したムービークリップを可視にし、    //表示中のムービークリップ名を更新する    eval(clip_name)._visible = true;    _root.disp_clip = clip_name;    //タイマーの時間差をリセット    _root.def_time = 0;   }  } (↑このスクリプトをコピーして使う場合は、各行の行頭に入っている全角のスペースを、半角のスペースかタブに置き換えて下さい。このまま使うとシンタックスエラーになります) 初期設定はメインのタイムラインの1フレーム目で行っているのですが、スペースの都合上、こちらは割愛させていただきました。上記のスクリプトで、_rootで始まる変数は、メインのタイムラインの1フレーム目で初期化しているものです。各変数の内容は、 ・before_time 1フレーム前での経過時間。初期値は、メインのタイムラインの1フレームが再生された時点での、getTimer()で取得した経過時間です。 ・def_time 毎フレームごとに発生する、現在と1フレーム前の時点での経過時間の差を管理します。初期値は0です。 ・disp_clip 現在、表示しているムービークリップの名前を記憶する変数です。初期値は、最初に選んだムービークリップの名前(_root.clip1~_root.clip7のいずれか)です。 なお、1~7の範囲で乱数を作る方法は、Flash のテクニカルノートで紹介されている式を使わせていただきました。 あまりスマートではない上に、文章だけでは分かりにくくて恐縮ですが、何かのお役に立てれば幸いです。

参考URL:
http://www.macromedia.com/jp/support/flash/ts/documents/fl0173.html
mamelight
質問者

お礼

ありがとうございます。恐縮です。 大変わかりやすかったです。 getTimerがあったなんて… どうもどの関数を使うのかって F1でヘルプみても見逃してしまうんですよね(^^; DPEさんはどのように辞書から、 さがしているんでしょうか? 慣れですかね(^^;

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

再び、DPEです。 #1の件は、問題・不明な点など、ありませんでしたでしょうか? 関数の探し方ですか?うーん... はっきり言ってテキトーです、テキトー *^へ^*; 作りたいものに近いサンプル、似たような構想の作品を眺めていると、大抵、「これなんか使えそう」と思う関数や考え方が見つかります。 Flash のヘルプも、何かないかな~、と思って見ていると、使えそうなものが見つかる場合も、たまにはあるのですが、ヘルプは機能の簡単な説明と単純なサンプルしか載っていないので、よく分からないです。 市販の書籍のサンプルのように1つの作品になっているものは、「この関数をこう利用すると、こんな処理になる」というのが具体的に分かり、しかも詳しい解説も付いているので、とても参考になります。 今回の getTimer は、「GO!GO!FLASH5[ゲームを作ろう編]」(エーアイ出版)に載っている、ストップウォッチのサンプルで使われているのを見て知りました。また、getTimer の戻り値を算術的に加工して時間を制御する処理は、Flash MX に付属のタイマーのサンプル( Flash をインストールしたフォルダの、「 Samples 」の中にあります)のスクリプトからヒントを得たものです。 この2つの作品がなかったら、Date オブジェクトの何かを使ってできるのでは・・・と考えていたかも知れませんね。 Flash の Date オブジェクトは、FlashPlayer のバージョンによっては不具合があったり、Windows と Macintosh とでは動作が違っていたりと、ひとクセある仕様になっている(今は大分改善されたようですが)ので、タイマーを作るにはちょっと向かないオブジェクトかと。 使えそうな関数を見つけてきても、それをどう使うかは工夫と試行錯誤。失敗もいろいろあります。白状しますと、#1で書いた  if ( (getTimer() % 5000) == 0 )  {   ・・・  } は、実際にやってしまった失敗だったりします ^^; スクリプトの組み方・考え方、スクリプトの記述のスタイルは、人によって傾向も違うし、好みもあります。書籍やネットで公開されているものは、ほんの一例に過ぎないです。 mamelightさんも、いろいろ試して、自分なりのスタイルで楽しい作品を作って下さいね。 質問の本題から外れてしまいましたが、#1の補足も兼ねて、ご参考までに。

mamelight
質問者

お礼

再びありがとうございました。 おかげさまで問題はありません。 やっぱりサンプルですかー。 サンプルはいくつか集めているんですが、 …こりゃ知り合いに 貸してしまった本を返してもらった方がいいですね(^^; 思い通りにつくれるようになりたいですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • FLASH時間処理のミリ秒の除去と時、分の表示のさせ方。

    flash内のあるボタンが押された時から時間を計測するということをしたいのですが、(イメージ的には携帯で通話しているときに表示される通話時間です。) http://oshiete1.goo.ne.jp/qa2684689.htmlのページの _root.timer.text = Math.floor((getTimer()-time1)/1000)+"."+("00"+(getTimer()-time1)).substr(-3, 3); では、ミリ秒と秒のみの表示になっておりミリ秒を除いた時、分、秒のみの表示がしたいのですが、60秒を超えてしまったり、分が0のままにんなってしまったりミリ秒が被ってしまったりと Math.floor((getTimer()-time1)/1000/60/60)+":"+((getTimer()-time1)/1000/60)+"."+("00"+(getTimer()-time1).substr(-3, 3); などいろいろ試してみたのですができません、根本的に間違っているのでしょうか? substr(-3, 3) と記述など何のためにあるのかもわからない初心者ですが、どなたかご教授していただけませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flash cs4 ランダム再生

    Flash初心者です。 やりたいことはホームページ上でアニメーションを再生させる際に、複数パターンのアニメーションをページをリロードするたびにランダムに切り替えるということです。 Flashにてアニメーションのタイムラインを複数パターンつくり、ランダム再生をActionScriptで制御するものを作成したいと思います。 アニメーションのタイムラインを作成しムービーシンボルとしたものを複数作成し、それをシーン1のタイムラインにて各フレームに配置して、1フレーム目にActionScriptにてgotoAndStop(ランダムフレームの記述?);とすればいいのかなと思っているのですが、正しいでしょうか? 現状ではアニメーションのムービーシンボルは必要なパターンだけ作成しました。 シーン1のタイムラインに配置まではしたのですが、ActionScriptの記述が素人なものでさっぱりわかりません。 どなたか教えていただけませんか? 自分なりにやってみたのですが、ランダム関数(?)以前にgotoAndStop()すら思うようにいきませんでした。 Flashはcs4を使用しております。ActionScript3.0のプロジェクトにして添付画像のように1フレーム目に gotoAndStop(10); としてみたのですが、パブリッシュしたswf ファイルは真っ白のまま何も動いてくれません。 gotoAndstop(10); としてみたらstopせずにタイムラインを再生しているようで、各アニメーションの最初のフレームだけが切り替わるものになってしまいました。 ともにコンパイルエラー 1180:未定義である可能性が高いメソッドgotoAndstopの呼び出しです といわれます。 ActionScriptが2.0と3.0とどちらがいいのかもわかってない状態ですが、ご教授願います。

    • ベストアンサー
    • Flash
  • Flashで背景をランダムに変えたいんですが‥‥

    外部のSWFファイルを読み込んで、それをランダムに表示させたいんですがどうも上手くいきません。 Flashがバージョン5のため、画像のみを貼りつけたSWFファイルを読み込ませて、それを背景に使おうとしています。 ホームページに載せて、見るたびに背景を変えようという狙いです。 それで、色々と調べてみてスクリプトもいじって外部ファイルを読み込んで表示はしてくれるようになったんですが、表示の一番上に来てしまってメニューのボタンなんかが隠れてしまうのです。 これが、書いてあるスクリプトです。 onClipEvent (load) { no = Math.floor(Math.random()*3)+1; loadMovieNum("haikei"+no+".swf", 0); } スクリプトにはどうも分からない点が多いので、細かく説明していただけるとありがたいです。 修正点や、「こういうやり方もある」っていうのがありましたら、ご指導の方をよろしくお願いします。

  • Flashでボタンをクリックすると表示・非表示するには?

    お世話になります。 ボタン「buttonC」に以下のスクリプトを記入し、クリックするとターゲット「C」が表示されるようにしています。「C」はタイムライン1では非表示で、タイムライン2以降で表示されるようにしてあり、「buttonC」をクリックすると「C」のタイムラインが2に移動するという仕組みです。 on (release) {  with (C) {   if (_currentframe == 1) {    gotoAndStop(2);   } else {    stop();   }  } } on (release) {  buttonC._alpha = (50); } 更に「buttonC」はクリックするとアルファ=50%になるようにしています。 この状態で、もう一度クリックすると、「C」を非表示(タイムライン1に戻す)にし、「buttonC」のアルファを100%にするように設定したいのです。Flagを使ってみたのですがどうも上手くいきません。 以下は試したスクリプトです。 on (release) {  if (playmode=1) {   with (C) {    if (_currentframe == 1) {     gotoAndStop(2);    } else {     stop();    }   }  } } on (release) {  if (playmode=1) {   buttonC._alpha = (50);   playmode = 2;  } } on (release) {  if (playmode=2) {   buttonC._alpha = (100);   C.gotoAndStop(1);   _root.playmode = 0;  } } 他の方法でも構わないので、良い方法がありましたら教えてください。 よろしくお願いいたします。

  • FLASHのランダム表示とサイズ指定

    Action scriptがいまいちわからないのでjavascriptでFLASH画像をランダム表示していますがサイズの指定ができません。 全て同じサイズのFLASHですが表示サイズが半分以下になってしまいます。 ヘッダに下記のスクリプトを書き、 ↓ <SCRIPT TYPE="text/javascript"> n=parseInt(Math.random() * 3); var flashurl = [ "1.swf","2.swf","3.swf ]; document.write("<OBJECT CLSID=xxxx SRC='"+flashurl[n]+"' ...>"); document.write("</OBJECT>"); </SCRIPT> 表示させたい場所に下記のように書いています。 ↓ <script language="javascript"> var flashurl = ["1.swf", "2.swf", "3.swf",]; flashurl = flashurl[Math.floor(Math.random() * flashurl.length)]; document.write('<object data="' + flashurl + '" type="application/x-shockwave-flash">'); document.write('<param value="' + flashurl + '" name="movie" /></object>'); </script> CSSレイアウトでページを作っている事は関係ないでしょうか。スクリプト初心者なのでよろしくお願い致します。

  • Flashでテキストをランダム表示

    現在ウェブページで、javascriptを使って、テキストメッセージをランダム表示しています。 FlashのActionScriptを使い、同等のことを行いたいのですが、どうすればよいでしょうか。 なお、出来たら表示するテキストは外部から読み込ませたいです。 よろしくお願いします。 現在使っているjavascriptは以下です。 --------------------------------- <script type="text/javascript"> var MsgCnt=5; var Msg=[]; Msg[1] = "これは1番目のメッセージです。"; Msg[2] = "これは2番目のメッセージです。"; Msg[3] = "これは3番目のメッセージです。"; Msg[4] = "これは4番目のメッセージです。"; Msg[5] = "これは5番目のメッセージです。"; var ary=[]; for(var i=0;i<MsgCnt;i++)ary[i]=i+1; function arySort(){ ary.sort(function(){return Math.random()-Math.random();}); } var cnt=0;arySort(); function RandomMsg(){ if(cnt>=MsgCnt)cnt=0,arySort(); document.write(Msg[ary[cnt++]]); } </script> <script type="text/javascript"> RandomMsg(); </script> --------------------------------- 環境: windows vista flash pro 8

    • ベストアンサー
    • Flash
  • flash初心者で action script 3.0で webサイト

    flash初心者で action script 3.0で webサイトを作っているのですが、なかかうまくいきません。 1.60個程のシンボルを配置してそれがじょじょに現れるようにする。 2.60個のシンボルの中から一つを選びクリックすると、クリックしたシンボル以外はステージ外に移動、もしくは消え、 選択したシンボルが、任意のサイズまで拡大される。 3.拡大されたシンボルをクリックすると、元の小さいサイズまで縮小され、残りの消えたシンボルが現れる。 というようなものです。 1はなんとかできたのですが、2.3がどうもうまくいきません。 ちなみに1の式は下記のように書きました。 なにぶんプログラムは初めてなもので、聞きかじったことをなんとか応用してなので、かなり長く汚いかと思われます。 下記の式と60個のボタンシンボルは、1つのムービーシンボル内に格納してあります。それをメインのタイムラインに配置しています。 var flg : Number = 0; var a : Number = 0; var b : Number = 0; var c : Number = 0; var d : Number = 0; (略) var eh : Number = 0; var ei : Number = 0; シンボル1.addEventListener(Event.ENTER_FRAME,function(event){ // ムービークリップを半透明 シンボル1.alpha = a; シンボル2.alpha = b; (略) シンボル58.alpha = eh; シンボル59.alpha = ei; if(flg==0){ a +=0.1;} if(a>0.5){ b += 0.1;} if(b>0.5){ c += 0.1;} (略) if(di>0.5){ ei += 0.1;} if(ei>1){ flg=1} }); それとボタンをクリックして、他のフレームに飛ばす処理も上の式の下に追加で書いてみたのですが、パブリッシュすると TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at MethodInfo-11() というエラーが無限にでてしまいます。 ソースは下記です シンボル1.addEventListener(MouseEvent.CLICK, vans); function vans(event:MouseEvent):void { gotoAndStop(2); } 本当に初心者です。 説明もへたくそですが、どうぞご享受下さい。

  • FlashバナーがIEで表示されません

    ページをリロードするたびに ランダムでいくつかの画像(バナー)が表示されるという Flashをつくりました ↓これがランダム表示の部分に使ったスクリプトです a=Math.ceil(Math.random()*4)+1; gotoAndStop(a); 作成はFlashMX2004です IE6.0だとフラッシュがブラウザに表示されません (ローカルでは上手くいきます) Firefox1.7だとローカルでもサーバー上でも上手くいきます IEで表示させるにはどうしたらいいでしょうか? よろしくお願いします。m(._.)m

  • 画像がランダムに表示されるFLASH

    いつもお世話になっています。 以下のようなFLASHを作りたいのですが、やり方がわからず困っています。 (1)リロードするたびにランダムで切り替わる画像1~6がある (2)画像の横にボタン1~6があり、マウスオーバーするとそれぞれ画像1、画像2…と表示される (3)ボタン1~6をクリックするとwebページ1~6へジャンプ(リンクさせている) 上記目的のうち、(2)(3)については完成しています。具体的にはAフレームには画像1、Bフレームには画像2…と配置し、ボタン1~6のアクションスクリプトにそれぞれ「マウスオーバー時にAフレームに飛ぶ」と記述しています。そしてメインのタイムライン1フレーム目にはアクションスクリプトに「ボタン1がクリックされたらwebページ1へ、ボタン2がクリックされたらwebページ2へ…」と記述しています。 これで(2)(3)の目的は果たせており、問題は(1)です。 ランダム表示される画像があり、ボタンのマウスオーバーで指定した画像が表示され、クリックでwebページへとぶ、ためにはどこにどんな記述をすれば良いのでしょうか? ちなみに作ったFLASHがサイトのトップページの一部となり、クリックで飛ぶwebページはそのサイト内です。 アドバイスいただけると助かります。 どうかよろしくお願いします。FLASHは上記がほぼ初めての挑戦である初心者です。

  • 画像のランダム表示

    こんにちは。 フラッシュで、画像をランダムに表示させたいのですが、 スクリプトの書き方がわかりません。何方か教えていただけないでしょうか? 構成は ステージ上の【表示ゾーン(zon_mc)】ムービークリップの中に【バリ表示(bari_mc)】ムービークリップを作っています。 トップのステージのタイムラインとは別に画像を表示、非表示させたいのでこのような形になってます。 表示させたい画像は【bari】ファルダの中の【bali01.jpg】~【bali06.jpg】です。 よろしくお願いします。

    • ベストアンサー
    • Flash
Oリングの付け方と適切な寸法
このQ&Aのポイント
  • Oリングを付ける時の適切な寸法について知りたいです。
  • 熱膨張も考慮してOリングの隙間を大きくする方が良いのでしょうか?
  • Oリングの適切な寸法や隙間について具体的な数値を教えてください。
回答を見る