- ベストアンサー
Math.ramdom()を特定回数繰り返す
Math.ramdomについての質問です。 特定回数ランダム処理を行った後に、別のフレームに飛ぶというのは、どのようにやればいいのでしょうか? 分かりづらいと思うので、例を書きます。 ---例---------------------------- 左右のキャラが交互にランダム選択の言葉を掛け合う。それを3回おこなった後に、左右のキャラがフェードアウト。 --------------------------------- こんな感じの動きです。 最初forを使って特定回数処理を行おうかと思ったんですが、forって一気に処理しますよね? ということは、ひとつのランダム処理を行った後に次のランダム処理をする場合には使えないということになりますよね? 分かりづらい説明ですいません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
関連するQ&A
- Math.randomは0にはならない? 0になる
・意味が分からないコードがあるので教えてください ■コード for (var i = 0; i < 10; ++i) { switch ((Math.random() * 4) | 0) { case 0: hoge(); break; case 1: …… ■質問 ・これはどういう処理をするコードでしょうか? ・「Math.random … 0 以上1未満」ということは0にはならないのでしょうか? なぜ「 | 0」? ・breakした場合、switchは抜けるけど、for文は継続?
- ベストアンサー
- JavaScript
- integerクラスとMathクラス
適当な整数numをキーボードから入力し、その回数だけ0から360までの整数をランダムに発生させ、その整数を角度(弧度法)とみなしたとき、その正接(tan)が最大のとなる整数を表示するプログラム を以下の手順で下記に作成した結果、角度が同じ値になります。これはどうしてですか?また、手順通りのプログラムにするにはどのようなプログラムて適切ですか? 手順 (1)最大値となる角度を代入する整数型の変数maxを初期値-90で定義する。 (2)乱数を発生させる回数を入力する。 (3)0から360までの整数を、乱数を使って1つ発生させ、整数型の変数degに保存。この値を表 示する。 (4)角度degをラジアンに変換し、実数型の変数radに代入し、表示する。変換は rad = deg * Math.PI/180.0 (Math.PIは円周率を表す) で行なうことができる。ただし、実際のプログラムでは上式をそのまま書くのではなく、変数 の型に注意して記述すること。 (5)radを用いて正接(tan)を計算する。 (6)maxから計算されるtanの値と比較し、(4)の結果の方が大きければmaxをdegに書き換え る。 (7)(2)から(5)を入力した回数になるまで繰り返す (8)maxを表示する。import java.io.*; class Kakudo3 { public static void main(String args[]) throws IOException { int max = -90; System.out.println("整数を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num = Integer.parseInt(str1); int deg =(int)(Math.random()*360); for(int i=0; i<num; i++){ System.out.print(deg+","); } double rad = deg*Math.PI/180.0; Math.tan(rad); } }
- ベストアンサー
- Java
- 再訪時のランダムな背景について
FLASH初心者です。 いま,FLASH MX 2004 でホームページを作っています。 再訪時に背景をランダムに表示したくてうまくできないので困っています。どなたかご教授ください。 具体的には,レイヤーの一番下段の「背景」のフレームに img = Math.floor(Math.random()*6+1); this.loadMovie(img+".jpg"); と書くと、ランダムに外部JPG画像が変わるのですが、 「背景」のレイヤーの上段にある文字やボタンが表示されません。 画像もゆっくりフェードインするようにアルファ値で変化させたいのですが,それも受け付けてくれません。 どのようにすればいいのでしょうか。
- ベストアンサー
- Flash
- 特定のものにだけスクリプトを有効にする
今晩は。JavaScript初心者です。 今、雪を降らせるスクリプトを作っています。 外部のjsファイルに記述したスクリプトを、特定のidを付けたdivにだけ有効にしたいです。 -----html------------------------------ <html> <head> <script type="text/javascript" src="js/snow.js"></script> </head> <body> <div id="snow"> </div> </body> </html> -----JavaScript(snow.js)------------------------------ sx = new Array(); sy = new Array(); sp = new Array(); num = 50; scrnx = 100; scrny = 500; function snowWrite() { styl = "<img src='snow.gif' style='position:relative;width:6px;height:6px;z-index:3;top:"; for (i=0; i<num; i++) { sx[i] = Math.floor(Math.random()*100); sy[i] = Math.floor(Math.random()*500); sp[i] = Math.floor(Math.random()*5) + 1; document.write(styl+sy[i]+"px;left:"+sx[i]+"px;' name='snow"+i+"'>"); } } function moveSnow() { for (i=0; i<num; i++) { sy[i] += sp[i]; if (sy[i] > scrny) sy[i] = -10; document.images["snow"+i].style.top = sy[i]; } } snowWrite(); 「document.getElementById」あたりかなと思ったのですが、それだとして(まったく見当違いかもしれませんが)、どこにどう記述してよいのかわかりません。 ご存知の方がいらっしゃいましたら、ご教授いただきたいです。 よろしくお願い致します。
- 締切済み
- JavaScript
- Flash 重複しないムービー再生とその後の処理について
標題の件、似たようなケースは多く、質問もいろいろ寄せられているの ですが、どうしても自分のケースに応用できなくて質問させていただき ました。 バージョンは「Flash MX 2004」で、やりたいことは以下の内容です。 ------------------------------------------- (1)9つのムービークリップを重複しないようにランダムに再生。 (なので正確にはシャッフルになるのでしょうか。。) (2)全てのムービーを再生後、次のフレームへ移動します。 ------------------------------------------- 以上です。 現在、1フレーム目に“Math.random();”を使ってランダムな数を取得 し、2~10フレームまで任意のフレームへ移動するよう設定していま す。2~10フレームまでは各ムービーを1フレームずつ配置している 状態で、それぞれstop();を設定しています。 各ムービークリップの最後のフレームには“_root.gotoAndStop(1);”を 設定して再びランダムな数を取得するようにしていますが、これだと重複 してしまうし、なおかつループし続けます。 「重複せずに全ムービーを再生後、11フレームへ移行する」という処理 がどうしてもわからず、ここから先が行き詰まってしまいました。 Math.random();のメソッド自体が適切でないのかも知れませんが、それら もふまえて、ご伝授いただけますでしょうか。 よろしくお願いいたします。
- ベストアンサー
- Flash
- AS2 ランダムに出現する煙
初めて質問させてもらいます。 FLASHのActionScriptで画面下から画面上へ昇っていく煙をランダムに出現させるASを作成したのですが、動き的には満足しているのですが開始時に画面に一気に煙がですぎになります。 煙のない状態から始めるには何を付け加えればいいのかわかりません。 どなたかご教授願えるかたお願いいたします。 環境 FLASH cs3.AS2にて製作 ソース ・タイムライン ----------------------------------------------- for (var i = 0; i<10; i++) { snow.duplicateMovieClip("snow"+i, i); } ----------------------------------------------- ・mc ----------------------------------------------- onClipEvent (load) { sw = Stage.width; sh = Stage.height; th = this._height; this._x = Math.random()*sw; this._y = Math.random()*sh; speed = Math.random()*4+1; flick = Math.random()*4+1; rotate = Math.random()*1; } onClipEvent (enterFrame) { this._y -= speed; this._x -= flick; this._rotation +=rotate; if (this._y<-869.8) { this._y = 1400; } if (this._x>sw+th || this._x<-th) { this._x = Math.random()*sw; this._y = -th; } } ----------------------------------------------- よろしくお願いいたします。
- ベストアンサー
- Flash
- ActionScript3.0について…
ある課題で下記の条件を満たしたものを制作するというものがありまして、 制作してみたんですが、回答例と異なっていました。 私が制作したものでは、なにか間違っているのか分かりませんので質問させていただきました。よろしくお願いいたします。 ☆☆☆ 条件 ☆☆☆ ★ _mcの移動幅を5~10もしくは-10~-5の範囲になるようにします。 ★ 縦方向、横方向ともにステージの端まで移動したら反転するようにします。 ※ステージ幅は400px、高さは300pxとします。 ※条件ではありませんが、この問題を解くヒントとして、 「移動幅は2分の1の確率で-1を掛ける」と 「2分の1を表す条件式の例としては[ Math.random < 0.5 ]が考えられます。」とあります。 ☆☆☆ 回答例 ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; if (Math.random() < 0.5){ stepX *= -1; } if (Math.random() < 0.5){ stepY *= -1; } _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if (_mc.x >= 400 || _mc.x <= 0){ stepX *= -1; } if (_mc.y >= 300 || _mc.y <= 0){ stepY *= -1; } } ☆☆☆ 私が書いたもの ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if(_mc.x > 400 || _mc.x < 0){ stepX *= -1; } if(_mc.y > 300 || _mc.y < 0){ stepY *= -1; } } あくまでもヒントでしたので、私が書く際にはヒントを見ずに書きました。
- ベストアンサー
- Flash
- ぐるぐるーぷ。
作りたい内容ですが、 (1)乱数を出して、表示。 (2)ループで前回と違う乱数を表示。 (3)あとは任意の回数表示させて終了。 【フレーム1】 a = 0;//前回のrandam_aを代入する!これで前の数字を出さないようにする。 aa = 0;//aループの条件スイッチ do{ randam_a = Math.floor(Math.random()*9) + 1;//ランダムの整数 if(randam_a == a){ aa = 1;//ここで【doループ】抜けれるようにフラグ } while (aa == 1); aa = 0;//また【フレーム1】に戻っても【doループ】できるように。 規定回数を表示を満たしてないなら gotoAndPlay(2); 規定回数の表示を満たしたなら gotoAndPlay(3); 【フレーム2】 hyouji = randam_a;//ダイナミックテキストに表示。 gotoAndPlay(1); 【フレーム3】 なにもなし。 おおまかに作りましたが 無限ループで抜けれない>< 悪いところは条件文って そこしかないので判るのですが、 どういう表現で、この流れが作れるか お助けくださいませ。
- ベストアンサー
- Flash
- ムービークリップを特定の組み合わせでランダム再生
Adobe Flash Pro CS6 でAction Script 3を使っています。 今現在複数あるループムービーを特定の組み合わせでランダム再生する方法を考えています。 使用するムービークリップの数は全部で5つです。 mcA,mcB,mcC,mcD,mcEと5つあります。クリップの再生時間はmcDのみが20フレームでほかはすべて10フレームです。これらのムービークリップをある程度のランダム性を持たせて特定の順番で再生したいのです。特定の順番は以下のとおりです。 mcA - mcB mcA - mcB - mcB mcC - mcD - mcE mcC - mcD - mcD - mcE mcC - mcD - mcD - mcD - mcE この四通りの再生方法でムービークリップをランダムで再生し続けたいのです。 それぞれのクリップはループになっているのでmcBからmcA or mcC、mcEからmcA or mcCに繋がってもシームレスに再生し続けられる感じになっています。 どういった方法を用いるのが最善でしょうか? 今現在一つのレイヤーに (mcA - mcB)( mcA - mcB - mcB )(mcC - mcD - mcE)(mcC - mcD - mcD - mcE)(mcC - mcD - mcD - mcD - mcE) と言った感じにすべてのムービークリップを再生する順番に配置して、それぞれの区切りでフレームラベルを用意して、配列にフレームラベルをすべて入れて、その配列とMath.randomを組み合わせてフレームラベルをランダムで選び、再生位置を飛ばして再生し続けていますが、これだとレイヤーの管理がしにくいのでいまいちしっくりきません。
- ベストアンサー
- Flash
- ソート(?)がうまくいかない。
こんにちは、今おみくじスクリプトを作成しているのですが、うまくいかない点があります。 大吉や吉といったランクごとに、健康運や恋愛運といった6つの部分が◎○△×のどれかにランダムでなるというスクリプトをつくりました、うまく実行はされるのですが、処理が重く、IEで「実行をとめますか?」とエラーが出ています。 何か、おかしな点があれば、教えていただけませんか? for(cnt=0;cnt<w.ura;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "◎"; else{ cnt -=1; } } for(cnt=0;cnt<w.urb;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "○"; else{ cnt -=1; } } for(cnt=0;cnt<w.urc;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "△"; else{ cnt -=1; } } for(cnt=0;cnt<w.urd;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "×"; else{ cnt -=1; } } w.ura等は、ランクごとの◎などの数が格納されたストラクトです。 やっていることは、◎の数まわして、空の配列であれば、◎をいれるといったことです。 よろしくご教授ください。
- ベストアンサー
- JavaScript
お礼
DPEさんのご指導のお陰で無事再生させることができました。 それにしてもDPEさんはすごいですね、ほんとに。 尊敬です。
補足
はい、DPEさんのおっしゃる通りのアニメーションです。 なんかものすごい説明不足で申し訳ないです。 しかも前回に続き、今回もこんなに詳しく説明していただき、ありがとうございました。 何となく分かったので、取りあえずこれから挑戦してみます。