1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

プラグイン:より「ばらけた」ランダムな数値を得る

しんぞ2017-05-07に開始した「ツクールMV」の中の討論

  1. しんぞ

    しんぞ ユーザー

    コアスクリプトで宣言されている関数Math.randomIntは
    精度が低い、似たような数値ばかり出ると不評なデフォルトのMath.randomをそのまま使ってしまっているので、
    他の方法で上書きしてみました。
    標準のランダム処理はもちろん、
    「ランダムに何かをする」プラグインより上に設置すると、ランダムの精度が上がるはずです。

    プラグイン本体
    http://shinnoji.main.jp/jimen75th/game/js/plugins/SNZ_randomXorshift.js
    ※正しく機能していなかったため、書き直しました。
    5/7 20:07までにダウンロードしてしまった方がいらっしゃったら、上書きをお願いいたします。


    5/14追記
    Webブラウザ用にデプロイする方はこちらをお使いください。
    http://shinnoji.main.jp/jimen75th/game/js/plugins/SNZ_randomXorshiftOnline.js
    Webブラウザの仕様で、ブラウザ上から実行した場合にJavascriptエラーが出ることが発覚しましたので、対策のためシンプルなバージョンも用意しました。

    ------
    例えば、トリアコンタンさんのEventReSpawn.jsと併用すると
    マップ全体に、団子にならずにイベントのコピーが配置されるので、シンボルエンカウント制作が捗ります。

    ちょっと調べたら面白そうなアルゴリズムが公表されていたので(Xorshift)採用してみました。
    割と適当にやってます;
    なんかおかしなところがあったらご指摘いただけると幸いです。

    使用にあたって制限は設けません。
    改変・再配布・商用利用・個人利用、ご自由にどうぞ。
     
    最後に編集: 2017-05-14
    #1
    ネコタ, kuro, 枢おとめ他8人がいいね!しています
  2. トリアコンタン

    トリアコンタン モデレーター スタッフ モデレーター

    こんにちは!
    便利そうなプラグインの公開ありがとうございます。

    導入してみたのですが以下の行でエラーになってしまうようです ><
    PHP:
    var _Math.randomInt Math.randomInt;
    このプラグインでは、元の処理を呼び出す必要はないので単にこの行を消せばうまく動作すると思います。
     
    #2
    kuro神無月サスケ がいいね!しています
  3. しんぞ

    しんぞ ユーザー

    うわあああ、すみません!
    エラーログバンバン吐いているのに気づかず、表面上動いているので満足していました…
    ご指摘の1行を削ったところ、動きはしたのですが
    何度やっても-3194769360が帰ってきて、機能していないことが発覚。
    ちょっと今原因を調べています。ご指摘ありがとうございました><
     
    #3
  4. しんぞ

    しんぞ ユーザー

    お騒がせしました…
    結局、すでに汎用プラグインをMITで作られていた方がいらっしゃったので、
    そちらに全面的に頼って書き直しました。
    若輩者が偉そうに言っておいて大失敗でした、申し訳ありません。
    今度は大丈夫だと思いますので、お手数ですが、もしダウンロードして使おうとしている方が他にいらっしゃったら、再ダウンロードをお願いいたします。
     
    最後に編集: 2017-05-07
    #4
  5. しんぞ

    しんぞ ユーザー

    …すみません、やっぱり動いていませんでした。少し時間ください。
     
    #5
  6. トリアコンタン

    トリアコンタン モデレーター スタッフ モデレーター

    お疲れさまです。
    修正ありがとうございます!
    JSの場合は数値がデフォルトで符号(+-)ありになってしまうため、少し工夫が必要だったみたいですね。

    エラーの件ですが、22行目に以下のコードを追加してみてください。
    PHP:
    var module = {};
    また、160行目を以下のように変えてみてください。
    PHP:
    return Math.floor(max module.exports.random());
    実装はMITのコードになってしまいましたが、重要なのはツクールで使えるようにする着眼点だと思うのですばらしい功績だと思います!
     
    #6
    PAPRIKO@DEGICAツミオ がいいね!しています
  7. しんぞ

    しんぞ ユーザー

    ありがとうございます、修正を反映したら問題なく動きました!
    手当たり次第な性格がモロバレでお恥ずかしいです;
    いわゆる旧石器なJavascriptから全然進歩していなかったため、基礎ができてませんでした…
    ともあれ、皆様のお役に立てれば幸いです!
     
    #7
    8787&クラウ, 神無月サスケ, PAPRIKO@DEGICA他2人がいいね!しています
  8. しんぞ

    しんぞ ユーザー

    Webブラウザ用にデプロイした場合、正しく機能していないことが発覚しましたので、
    対策のために記述をシンプルにしたものも用意しました。
    親書き込みをアップデートしましたので参照ください。
    (ブラウザで非対応の関数を使用している箇所がありました)
     
    #8
    神無月サスケトリアコンタン がいいね!しています

このページを共有