放送者を判別する
マルチプレイのニコ生ゲームでは、ゲーム内のどのプレイヤーが放送者か判別することができます。
Join
マルチプレイのニコ生ゲームにおいては、ゲーム開始後に一度だけ g.game.onJoin トリガーが fire されます。 この onJoin によって放送者にあたるプレイヤーの ID が通知されます。
INFO
Akashic Engine の g.game.onJoin で通知されるプレイヤー (join しているプレイヤー) が何を指すかはサービス依存です。 ニコ生ゲームではこれを「放送者」を表すために利用しています。 また onJoin の対になるトリガー g.game.onLeave が通知されることはありません。
次のコードは、最後に join したプレイヤーを記憶して参照する例です。
let lastJoinedPlayerId = null;
g.game.onJoin.add((ev) => {
lastJoinedPlayerId = ev.player.id;
});
scene.onPointDownCapture.add((ev) => {
if (ev.player.id === lastJoinedPlayerId) {
// ニコニコ生放送上で動かす場合、イベントを生成した(=画面を押下した)のが「放送者」である時のみ実行される
// ...
}
if (g.game.selfId === lastJoinedPlayerId) {
// ニコニコ生放送上で動かす場合、この実行環境(インスタンス)が「放送者」のものである時のみ実行される
// ...
}
});なお g.game.selfId は、今そのゲームを実行している環境(インスタンス)のプレイヤー ID です。このコード例のように、あるイベントの生成元が自分(このインスタンス自身)かどうかを判断したい時に利用できます。
IMPORTANT
g.game.selfId を参照する条件分岐は ローカル処理 になるため、内容に制限があります。 詳細は Akashic Engine 入門 » Join と Leave の g.game.selfId とローカル処理 を参照してください。
動作確認
g.game.onJoin, g.game.selfId の動作確認は akashic serve コマンドで行うことができます。
akashic serve --target-service nicolive--target-service nicolive (または -s nicolive) オプションをつけて起動した場合、 「起動後に最初に開かれたウィンドウ」のプレイヤーが「放送者」役として扱われ、 g.game.onJoin で通知されます。
TIP
-s nicolive オプションを使わない場合、serve の画面上の「Join Me」「Leave Me」ボタンで 「そのウィンドウのプレイヤー」を join/leave させることができます。

