このページのサンプルコードをダウンロード
各プレイヤーには「join しているか否か」という二値の状態が存在します。これは実行環境が規定する値です。「join しているプレイヤー」が何を意味するかは、実行環境によって定まります。
あるプレイヤーが join 状態になる時、 g.game.onJoin
が fire され g.JoinEvent
が与えられます。同様に join 状態でなくなる時、 g.game.onLeave
が fire され g.LeaveEvent
が与えられます。
元々はその名の通り「ゲームに参加する」動作を表現するために作られた機能ですが、 歴史的経緯から、現在は実行環境が規定する「特殊なプレイヤー」を通知するものになっています。
特に ニコニコ生放送上で実行する場合に、配信者と視聴者を区別するために利用できます 。
joinするプレイヤー いつjoin状態になるか いつjoin状態でなくなるか ニコニコ生放送
(mode: "multi_admission")配信者 ゲーム開始直後 なし(joinしたまま) ゲームアツマール
(マルチプレイ)部屋を作ったプレイヤー ゲーム開始直後 なし(joinしたまま)
次のコードは、最後に 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 です。このコード例のように、あるイベントの生成元が自分(このインスタンス自身)かどうかを判断したい時に利用できます。
g.game.onJoin
や g.game.onLeave
の動作確認は akashic serve
コマンドでも行うことができます。
画面上側、ツールバー上の「Join Me」ボタンを押すと、そのウィンドウ(インスタンス)のプレイヤーが join します (g.game.onJoin
が fire されます)。
join 済みの場合は「Leave Me」ボタンに切り替わり、 g.game.onLeave
を fire させることができます。
akashic serve
コマンドは、 --target-service
(省略名 -s
) オプションに nicolive
を指定して起動すると、ニコ生ゲームの開発に便利な振る舞いになります。
この状態では「Join Me」ボタンが無効になり、最初に開いたウィンドウのプレイヤーだけが必ず join します (配信者役になります) 。
そのため都度ボタンを押す手間が省けます。
akashic serve --target-service nicolive
その他、ニコニコ生放送に関する内容は、 開発者向けガイド の ニコニコ生放送で遊べるゲームの作成 を参照してください。