Akashic Engine 逆引きリファレンス

プレイヤー固有の乱数を生成する

プレイヤー固有の乱数を生成するには g.game.localRandom を利用します。

凡例

g.game.localRandom.generate();
var localRect = new g.FilledRect({
  ...,      // その他のプロパティ
  local: true // ローカルであることを指定
});
scene.append(localRect);

localRect.onPointDown.add(function () {
  var random = g.game.localRandom.generate(); // 0 以上 1 未満の整数を取得。この値は各プレイヤーで異なる
  localRect.width = 30 + random * 100;
  localRect.modified();
});

全員に同じ乱数を生成するには g.game.random を利用してください。

利用例

次のコンテンツは、矩形をクリックするとランダムに矩形の大きさが変わります。

詳細

g.game.localRandom は、各プレイヤーでシード値が異なる乱数生成器です。 すなわち、同じ順序・同じタイミングで生成しても、プレイヤーごとに異なる値が得られます。

g.game.localRandom は、Math.random() と同じ機能(0 以上 1 未満のランダムな浮動小数点数を生成する)の関数です。 Akashic Engine の乱数生成器には、他に g.game.random があります。 g.game.random と対比して、ローカル処理での用途を明確にするため g.game.localRandom が作成されました。

g.game.localRandom は、local: true をつけて生成したローカルエンティティのイベントなど、ローカル処理中でのみ利用してください。 ローカル処理以外で利用した場合、ゲームのグローバルな実行状態を破壊する恐れがあります。 詳しくはプレイヤーごとに異なる描画を行うを参照してください。

また、Math.random() を利用したコンテンツを akashic-sandbox で実行すると警告ダイアログが出ますが、g.game.localRandom では警告はでません。

generate() は実数を返しますが、整数の乱数が必要なことも多いでしょう。0 以上 x 未満の整数は、 generate() を使って次のように生成できます。このコードでは、 generate() の戻り値を x 倍することで「0 以上 x 未満の実数」にし、 そこから Math.floor() で小数点以下を切り捨てて「0 以上 x 未満の整数」にしています。

Math.floor(g.game.localRandom.generate() * x);

関連情報