P5.エアホッケー.11「得点」

得点処理をする。似たようなことは「玉転がし」でもやっているので、もうまったく難しくない。ミニゲーム(クソゲー)を2~3コ作るってことがいかに有意義なのことなのか、実感だな。
初期値設定

❶❷はそのまま、その通り。
❸ 得点データは「神」に保管してもらう。敵の点("comTen")と自分の点("playerTen")の初期値を設定。もちろんデータタイプはInteger(整数型)。で共に"0"点。
パックを消す前に
現状ではパックがどちらのゴールに入っても、すぐパックを消すようになっている。下図。

ここの❸の部分に修正を加える。パックをすぐに消すんじゃなくて、自陣ゴールなのか敵陣ゴールなのか判断(❹)して、それぞれの処理に飛ばす(❺)ようにする。下図。

❹ 自陣ゴールなのか敵陣ゴールなのか判断する。判断基準はパックの Y 位置。だから、Separate XYZで持ってくるのは Y な。Y がプラスなら敵陣だし、マイナスなら自陣だ。プラマイの判断は"0"とGateすればいい。簡単。
❺ それぞれのイベントに飛ばす。(イベントはこれから作るぜ。) 敵陣にゴールしたら自分の点("PLAYER_TOKUTEN")だし、自陣ゴールなら敵の得点("COM_TOKUTEN")だ。間違えるなよ。
で、ここで大事なのは、このイベントはどっちも「神("nKamiGameKanri")」にある(作る)ってことだ! オブジェクトを入れる欄を見てくれ。"Kami" とあるだろ。こんな風にイベント処理は、他オブジェクトのイベントに飛ばすことが出来るんだ。
(別に本当は "nPack" 内にイベントを作ってもよかったんだけど、イベントっつーのは他オブジェクトのイベントに処理を飛ばせるってことをやってみたかったので、こうしたって感じ。ま、イベントを使えば、オブジェクト間での通信が出来るってことだよ。面白いな。)
ただ、注意なのは、イベントはスクリプトに書くわけなんだけど、スクリプトが持っているんじゃなくて、オブジェクトが持つ事になるわけな。
得点
"nKamiGameKanri"に戻って、イベントを作る。まずは自分の得点。

❶ On Event: "PLAYER_TOKUTEN" でイベント作成スタートだ。ま、他のオブジェクトから飛んでくるのでノードには色付けといた方がイイぞ。
❷ 得点加算: 「playerTen = playerTen +1」をやってるだけな。「玉転がし」の時とほぼ一緒だ(ココ参照)。Mathノードのデフォが "Add"(足す)なのでちょい楽。
❸ UI表示: 自分の点はキャンバスの エレメント名 "Text6" の "Text" プロパティだ。ここに "playerTen" を入れればイイ。
❹ パック消す: で最後、パックを消すのはこのタイミングとなる。ただ、"packAru" も "sPackRoot" も「神("Kami")オブジェクト」が持ってるプロパティだから、オブジェクト欄は空欄でOK。
敵用にもほぼ同様のイベント(下図)を作って、

❺ イベント名は "COM_TOKUTEN"。
❻ 敵の点数は "comTen"。
❼ 表示する場所は、エレメント名 "Text5"。
完成!
テストプレイ
久しぶりのGif。得点がちゃんと入ってるだろ~。

パックの "myDir" をいじってちゃんとどっちも動くことを確認してな。自ゴール、敵ゴール、"PUSH SPACE KEY"のチカチカ、パック消える(シーンルートごと)。ちゃんとなってる?
じゃ、今日はここまで。
で次はー、このままだと得点が永遠に入るから「勝利得点」を設定してゲームオーバー処理かー、パックの出方が単一だからランダムにするかー、マレット動かしたいよなー。
本日のポイント
- クソゲーでも2~3こ作れ。理解が深まる。
〇 次回、多分ゲームオーバー処理。たぶん。・・・やっぱ、パックの出方のランダム化かぁ・・・、やっぱ・・・