(ニコ生ゲーム) 放送者の端末でのみ処理する
ニコ生ゲーム環境において、放送者のみ処理を行うには放送者の ID を取得、比較することにより実現できます。
凡例
javascript
let firstJoinedPlayerId = null; // 一番最初にJoinした人を覚える変数
g.game.onJoin.addOnce(function(ev) {
// ニコ生ゲームにおいては放送者が一人だけ Join してくるため、その人の ID を放送者とする
firstJoinedPlayerId = ev.player.id;
});
scene.onUpdate.add(function() {
if (!firstJoinedPlayerId) return;
if (g.game.selfId === firstJoinedPlayerId) {
... // 放送者の処理
} else {
... // 参加者の処理
}
}
詳細
マルチプレイゲームの流れとして、ゲームに誰かが Join します。その時の処理を追加するコードが凡例の下記部分です。
javascript
g.game.onJoin.addOnce(function (ev) {
firstJoinedPlayerId = ev.player.id;
});
マルチプレイのニコ生ゲームでは、実行開始直後に JoinEvent
が送信されます。この JoinEvent
は必ず放送者のプレイヤー ID 情報を持ちます。また他に JoinEvent
が送信されることはありません。そのため、最初に Join した ID を放送者の ID とすることができます。放送者の ID を比較することにより放送者のみの処理を行うことができます。
凡例のコードの下記部分で、放送者の ID と g.game.selfId
を比較し、等しい場合には放送者としての処理を行い、異なる場合に参加者の処理を行います。
javascript
if (g.game.selfId === firstJoinedPlayerId) {
... // 放送者の処理
} else {
... // 参加者の処理
}
g.game.selfId
は「プレイヤーごとに異なる値」です。そのため これを参照する条件分岐内の処理は ローカル処理 になる ことに注意してください。
この if 文のブロックは、明らかにプレイヤーによって実行されるかどうかが異なります。 そのためローカルイベントに対する処理と同じく、「プレイヤー間で間接的に共有されている実行状態」を破壊してはいけません。 たとえば g.game.random
を利用したり、非ローカルなエンティティを生成・操作すると、他プレイヤーと実行状態がずれてしまい、マルチプレイが破綻します。