mieki256's diary



2010/11/12(金) [n年前の日記]

#1 [flash] 疑似乱数とattachMovie()でハマる

MovicClipの位置や速度その他を微妙にずらしたいので疑似乱数を取得するメソッド等が欲しいのだけど。メインシステム側に、そういったものが用意されているのか、よく分からず。Actionscriptそのものには、 Math.random() があるので、ただ単に乱数が欲しいならソレを使えばいいのだけど。しかし、Math.random() は、種の初期化ができないように見受けられる。ゲームなどでは乱数にも再現性が求められるので、今回は使えない。

仕方ないので、疑似乱数取得のメソッドも実装することに。検索してみたら、線形合同法を使うのが一般的らしい。Xorshiftという、処理時間が短くてそこそこの結果が得られるという方法も気になったけど。GPLらしいという話も見かけたので諦めた。自分だけで全部作ってソースも含めて公開するならともかく、今回はそうじゃないので。

で。簡単なテストプロジェクトを作って、線形合同法を試してみたのだけど。これが上手くいかない。2回ぐらい値を返したあたりでXがずっと0になってしまったり。どうもこの手のソレは、long型変数で桁溢れを起こして上位ビットが消えていくことを期待して実装する例が多いようで。Actionscript 2.0 では、数値は Number という型でしか使えないようなので、どうしたものかなと。ひとまず、0x0ffffffff で and を取ってみたが…これでちゃんと動いているのかどうか…?

x = ((A * x) + C) % m の A,Cを色々変えて、BitmapData に点を打ってみたけれど。モノによっては、絶対に点が打たれない場所が発生したりして、うーん。やっぱりちゃんと動いてないのかもしれない。が、一応全部の場所に点が打たれるような値はあったので、ひとまずこれでいいやという気分に。

テストプロジェクト上では MovieClip がちゃんと回転拡大縮小していたのだけど。メイン側にコピペして動かしたら、頓珍漢な場所に表示されてしまって頭を抱える。色々調べてみたが、どうもメインシステム側で attachMovie() を呼ぶ際、インスタンス名に同じ文字列を指定しているあたりが怪しい気がしてきた。試しに、カウンタを用意して、同じ文字列にならないようにしてみたところ、意図通りに回転拡大縮小するようになった。やはり、一意の文字列をインスタンス名として与える必要がある、ということなんだろうな…。ていうか、Actionscriptのヘルプドキュメントにもそう書いてあった記憶があるんだけど。

以上、1 日分です。

過去ログ表示

Prev - 2010/11 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project