スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。
前回は別プレイヤーを検知することに成功したぞ!これで新しい人が同じプロジェクトをプレイしていることをプログラム内で知ることができたんだ。
これはオンラインゲームにとって最高にエキサイティングな前進だよね!
今回はこれをもっと進めていくぞ。
今回の目標「プレイヤーを管理する」
新しいプレイヤーを検知できたので、このプレイヤー情報を格納するリストを作りたい。そうすることでこのプレイヤーは検知済みのプレイヤーとして判定することも出来る。それの何が嬉しいかというと、プレイヤーが新しく入場した際に1回だけ行いたい処理がある場合に役立つんだ。全く新しいプレイヤーなら処理Aと処理B、検知済みのプレイヤーなら処理Bだけ、みたいな分岐を作れるってことだよ。
この機構をプレイヤー管理と呼ぼうか。今回はこの管理システムを構築することを目標に一緒にやっていこう!
カンタンなまとめ
今回の流れをカンタンにまとめておくよ。
- 新しく2つのリスト「★プレイヤーUID一覧」と「★プレイヤーデータ一覧」を作りプレイヤー管理用のデータベースのように取り扱う
- 新しいプレイヤーのときは入場処理とデータ更新処理を行い、検知済みのプレイヤーのときはデータ更新処理のみを行うように、クラウド変数の受信処理を作り込む
こんな感じ。ステップは少なそうに見えるけどリスト同士の関係性が複雑になってくるので、じっくり取り組もう!
新プレイヤーを追加する
検知した別プレイヤーが新しくゲームをプレイし始めた人なのか、それともすでに検知済みの人なのかによって処理が異なるので、そこを判断できるようにしよう。
作戦としては前回クラウド変数の比較でやったように、リストを使った比較をしていく。ただし今回は、デコードしたプレイヤーUIDがすでに検知済みのプレイヤーUID一覧にあるかどうかを調べて、なければ新規、あれば既知として判断するコーディングをしていきたい!
新しいリスト①「★プレイヤーUID一覧」を用意する
すでに検知済みのプレイヤーなのか、それとも新規プレイヤーなのかを判断するために、プレイヤーUID一覧をリストとして用意しよう。
初期化する
使う
変数「エンコード文字列」を1度デコードしたから、変数「値」の中にはプレイヤーUIDが入っているんだったね。
★プレイヤーUID一覧に存在しているかどうか、ちょっと変わったブロックを使ってチェックしてみよう。
リストブロックの1つに、リスト内の何番目に値が存在するかを教えてくれるものがあって、リスト内になければゼロを返してくれる。ゼロが返ってきたら新規プレイヤー、1以上なら検知済みのプレイヤーっていうことになるよう作っていくよ。
新規プレイヤーの入場処理を行う
では条件ブロックを使って判定していこう。プレイヤー番号がゼロなら新規プレイヤーだね。
プレイヤーUIDを一覧に追加して、次回からは検知済みのプレイヤーとして扱われるようにしよう。
新しいリスト②「★プレイヤーデータ一覧」を用意する
ここで2つ目の新リストだ。★プレイヤーデータ一覧を用意しよう。
初期化する
使う
空白をリストに追加して長さを増やしておこう。新しいプレイヤーのデータが格納される予定の行だよ。
プレイヤー番号を更新する
新しいプレイヤーの番号はゼロのままなので、このあとすぐ追加するプレイヤーデータの行の番号を割り当てておこう。
プレイヤーデータを更新する
ここまでは新規プレイヤーのみの入場処理だったけど、ここからは検知済みのプレイヤーとも共通の処理になるよ。
★プレイヤーUID一覧の何番目にプレイヤーUIDが存在するか、新規プレイヤーも検知済みプレイヤーもこの段階では明らかになっているね。
そこで、★プレイヤーデータ一覧の同じ位置に更新データを格納していきたい。図にするとこんな関係性だよ↓
プレイヤーデータリストを置換する
プレイヤー番号の位置にあるデータを2つ目の引数「更新データ」で置換しよう!
プレイヤー番号を空白にしておく
後片付けとしてプレイヤー番号を空白にしておこう。これは次のチュートリアルで重要になってくるよ。
テストぉ!
並べてテストしてみよう!
ナイスぅ!完璧に同期できてるね。これタブを3つ並べても上手くいくよ。やってみてね。プレイヤーUID一覧とプレイヤーデータ一覧が2行ずつに増えるから。その瞬間ゾワッてなるかもよ、自分すげーってw
次回へ
この同期システムを使えば、なんと100人参加型のオンラインゲームを作ることも可能なんだよ……すごくない?
今はクラウド変数を1つだけしか使ってないっていうのも信じられないよね。
よくここまで来たね。スクラッチのトップクラスのオンラインゲームを作る、そう豪語して始まったこのシリーズもいよいよココまで来た。頂上はもう視界に捉えているぞ!もうちょっと一緒に頑張ろう!
次回は別プレイヤーを表示させるところを実装しよう。もちろん表示するだけじゃなくて動きも同期させるぞ!さらにその後のチュートリアルではクラウド変数を8つ使ってスケールアップさせるよ。そしたら同期のスムーズさが圧倒的に良くなるから期待してて。
また近日中に更新するので待っててくれぃ。
- ① クラウド変数の使い方
- ② エンコードする
- ③ デコードする
- ④ マイナス値に対応する
- ⑤ バッファリングを実装する
- ⑥ 別プレイヤーを検知する
- ⑦ プレイヤーを管理する (いまここ)
- ⑧ クローンを使おう
- ⑨ スケールアップする
- ⑩ 退場処理を作る
- ⑪ 自作ゲーム「鬼ごっこ」を作る
- ⑫ MMO鬼ごっこに改造する
- ⑬ クラウド変数でユーザー名を共有する方法