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