Skip to content

放送者を判別する

マルチプレイのニコ生ゲームでは、ゲーム内のどのプレイヤーが放送者か判別することができます。

Join

マルチプレイのニコ生ゲームにおいては、ゲーム開始後に一度だけ g.game.onJoin トリガーが fire されます。 この onJoin によって放送者にあたるプレイヤーの ID が通知されます。

INFO

Akashic Engine の g.game.onJoin で通知されるプレイヤー (join しているプレイヤー) が何を指すかはサービス依存です。 ニコ生ゲームではこれを「放送者」を表すために利用しています。 また onJoin の対になるトリガー g.game.onLeave が通知されることはありません。

参考: Akashic Engine 入門 » Join と Leave

次のコードは、最後に join したプレイヤーを記憶して参照する例です。

javascript
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) {
    // ニコニコ生放送上で動かす場合、この実行環境(インスタンス)が「放送者」のものである時のみ実行される
    // ...
  }
});
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 と Leaveg.game.selfId とローカル処理 を参照してください。

動作確認

g.game.onJoin, g.game.selfId の動作確認は akashic serve コマンドで行うことができます。

sh
akashic serve --target-service nicolive
akashic serve --target-service nicolive

--target-service nicolive (または -s nicolive) オプションをつけて起動した場合、 「起動後に最初に開かれたウィンドウ」のプレイヤーが「放送者」役として扱われ、 g.game.onJoin で通知されます。

TIP

-s nicolive オプションを使わない場合、serve の画面上の「Join Me」「Leave Me」ボタンで 「そのウィンドウのプレイヤー」を join/leave させることができます。