• ベストアンサー

現在、flashlite1.1において、画像がランダム表示される携帯用

現在、flashlite1.1において、画像がランダム表示される携帯用待受けFLASHを作成しています。 一番簡単なスクリプトとして以下の形式でスクリプトを記載したのですが、 同じ画像が連続して表示されることを防ぐにはどうしたらよろしいでしょうか。。 r=random(n)+3; gotoAndStop(r); また、math.randomを使用するのと上記とでは、 どのような違いがあるのでしょうか? ご教示いただけると幸いです。 よろしくお願いします。

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

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

#1です。 #1 で回答した内容は random関数 と Math.random との違いだけで, 本題の > 同じ画像が連続して表示されることを防ぐには > どうしたらよろしいでしょうか。。 に回答していませんでしたね。すみません。 重複しないランダムな順列を作るのでしたら,次のような考え方をします。 「配列を偏りなくランダムに並替える」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html しかしそうではなくて, 1つ前の数とかぶらないようにする方法ですよね? それでしたら, 原始的ではありますが,  1つ前に出たランダムな数を保存しておいて  次に出したランダムな数が保存して置いた数と同じであれば,  何度でもランダムを算出し続ける。 という方法が良いのではないでしょうか。 --------------------- // 変数 r が s であるうちはループ while (r == s) { r = random(n)+3; } //変数 r の値を 次のために 変数 s に保存しておく s = r; gotoAndStop(r); ---------------------  

player0499
質問者

お礼

お返事が遅れてしまい、大変申し訳ございません! ご回答ありがとうございます! 大変ご丁寧なご回答で、まだまだ初心者の私でも 概ね理解することができました。 あとは実際に実装してみて、より理解を深めていきたいと思います。 この度は、大変丁寧なご回答ありがとうございました!

その他の回答 (1)

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

Flash 閲覧用エンジン としての Flash Lite 1.x は, Flash Player 4 がベースとなっていて, 本来 ○○クラスの○○メソッド というものは存在しないのです。 Flash 4 では グローバルな「関数」 があるだけなのです。 たとえば, A_mc に A.swf をロードする場合でも、  A_mc.loadMovie("A.swf"); という MovieClipクラス の loadMovieメソッド を使うのではなく、  loadMovie("A_mc","A.swf"); という loadMovie関数 を使うのが通常(本来のやり方)です。 形で言えば  関数(引数1, 引数2, …) という形です。 雰囲気 VBA や Excel の関数に似ています。 ですから, Math.random=Mathクラスのrandomメソッド なんてものは本来 Flash Lite 1.x には通用しないのです。 しかし,それではあまりにも使い勝手が悪いためか, Mathクラスの一部のメソッドは Flash Lite 1.x 用 SWF をパブリッシュするときに使うことができるようになっています。 これは,決して Flash Lite 1.x が Mathクラスのメソッド を理解して動作させているのではなく, Flash オーサリングツール(Flash 8 や CS3 や CS4 など)が, Mathクラスのメソッド を関数や演算数式に変換をかけてから, Flash Lite 1.x 用 SWF を生成するためです。 r=random(n)+3; gotoAndStop(r); これを Mathクラスのメソッドを使って書き換えると次のようになります。 r = Math.floor(Math.random()*n)+3; gotoAndStop(r); これを Flash Lite 1.1 用 SWF にパブリッシュします。 すると SWF 内に入る前にスクリプトは次のように変換されるようです。 /:$X =(random(2147483647) / 2147483647) * n; r = ((/:$X<int(/:$X))?int((/:$X - 1)):int(/:$X)) + 3; gotoAndStop(r); かなり無理と無駄がありますね。 ちなみに最初の分はそのままです。 r = random(n) + 3; gotoAndStop(r); Math.sin などどうしてもそれを使わなければならない場合は別として, Flash Lite 1.x では極力 Math.random() ではなく random 関数の方を使うことをお薦めします。 なお, Flash Lite 1.x ではない通常用 SWF の場合は, Math.random() の方が質が良いランダムが得られるそうです。 ※ SWF 内 スクリプトは HugFlash で解析

player0499
質問者

お礼

お返事が遅れてしまい、大変申し訳ございません! ご回答ありがとうございます! 大変ご丁寧なご回答で、Math.random() とrandom 関数を 理解することができました。 ありがとうございます!