Join と Leave

# Join

各プレイヤーには「join しているか否か」という二値の状態が存在します。これは実行環境が規定する値です。「join しているプレイヤー」が何を意味するかは、実行環境によって定まります。

あるプレイヤーが join 状態になる時、 g.game.join が fire され g.JoinEvent が与えられます。同様に join 状態でなくなる時、 g.game.leave が fire され g.LeaveEvent が与えられます。

これ自体は環境依存が強くあまり使い出のない機能ですが、 ニコニコ生放送上で実行する場合、配信者のプレイヤーだけが join します (leave はしません)。そのため、配信者と視聴者を区別するための情報として利用することができます。

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

var lastJoinedPlayerId = null;

g.game.join.add(function(ev) {
  lastJoinedPlayerId = ev.player.id;
});

scene.pointDownCapture.add(function(ev) {
  if (ev.player.id === lastJoinedPlayerId) {
    // ニコニコ生放送上で動かす場合、イベントを生成した(=画面を押下した)のが「配信者」である時のみ実行される
    // ...
  }

  if (g.game.selfId === lastJoinedPlayerId) {
    // ニコニコ生放送上で動かす場合、この実行環境(インスタンス)が「配信者」のものである時のみ実行される
    // ...
  }
});

なお g.game.selfId は、今そのゲームを実行している環境(インスタンス)のプレイヤー ID です。このコード例のように、あるイベントの生成元が自分(このインスタンス自身)かどうかを判断したい時に利用できます。

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

serve

画面上側、ツールバー上の「Join Me」ボタンを押すと、そのウィンドウ(インスタンス)のプレイヤーが join します (g.game.join が fire されます)。 join 済みの場合は「Leave Me」ボタンに切り替わり、 g.game.leave を fire させることができます。

# ニコ生ゲーム

その他、ニコニコ生放送に関する内容は、 開発者向けガイドニコニコ生放送で遊べるゲームの作成 を参照してください。