放送者を判別する
マルチプレイのニコ生ゲームでは、ゲーム内のどのプレイヤーが放送者か判別することができます。
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 させることができます。