プレイヤー固有の乱数を生成する
プレイヤー固有の乱数を生成するには 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);