お疲れ様です。YUmarunosuke(ゆうまるのすけ@YUmaru16061307)です。
今回は、「ナビつき!つくってわかる はじめてゲームプログラミング」
(はじプロ)の”カウンターノードン”と時間表示の解説をします。
「はじプロ」のことを知らない方は、是非過去の記事をご覧ください。
レッスン2でカウンターノードンが登場しました。
『数えるのが得意なノードン』と説明されています。

今後フリープログラミングで自作ゲームを作るうえで、
最も使用するノードンのうちの1つだと思います。
また、ゲーム内で時間を使ったギミックを作る際に、
カウンターノードンを使った時間計算もよく使われます。
タイムを競うゲームは、

ほかの人には負けない!
と競い合いたくなる意欲が湧きますし、
制限時間が設定されるゲームは、

操作間違えた!これどうすればいいんだ!?(あたふた)
と、ハラハラ感が出て面白いゲームになりますよね。
ゲームによくある基本的な機能ですので、
ポイントを絞って解説します。是非ご覧になってください。
- ナビつきレッスンを何となく進めてしまっていたあなた
- カウンターノードンをどのように使えるかイメージできていないあなた
- 自作ゲームに時間を使ったギミックを作りたいあなた
- カウンターノードンは数を数えるノードン
- 1/60秒ごとに情報は更新される
=1秒間で60回の処理が行われる - マッピングノードンを組み合わせて1秒を作り上げよう
カウンターノードンとは?数を数えていく役割です
カウンターとは数を数える機能をもつものです。
そのままですが。
しかし、数を数える、といっても、いろいろな数があります。
- 壊したモノを数える
- ボタンを押した回数を数える
- 時間を数える
- 経過した時間を数える
- 残り時間を数える
などなど・・・
これらの数えかたをどのように再現するか、1つずつ解説をしてみました。
覚えておきたい前提:1/60秒ごとに情報は更新される
マッピングノードンの解説記事でも記載していますが、
ノードンガレージで設定している処理は、1/60秒ごとに行われています。
ゲーム業界(特に格闘ゲームなど)では、「1フレーム(=1/60秒)」と呼ばれたりします。
例えば、下の図のように、定数ノードンとカウンターノードンをつなげます。

すると、1/60秒ごとに定数ノードンは出力1を投げます。

カウンターノードンはその出力1を受け取ります。

次の1/60秒(2/60秒目)には、さらに定数ノードンは出力1を投げます。

カウンターノードンはさらにその出力1を受け取り、合計である2を蓄えます。

これを1秒続けると、カウンターノードンは60の出力を受け取り、蓄えることになりますね。

つまり、カウンターノードンへの入力を適切に設定しないと、
ビックリするくらい大きな値を短時間でカウントしてしまうことになりかねません。
次の章から順々に覚えていきましょう。
解説:カウンターノードンの使用例
使用例①:モノが壊れたかずを数える
レッスン2「コロコロボール」にて作る、リンゴを数える仕組みと同じものです。
リンゴが壊れると、
ものがこわれたしゅんかんノードンが1/60秒だけ1を出力します
それをカウンターノードンが受け取ります。

その後は、次のリンゴが壊れない限り、
ものがこわれたしゅんかんノードンは出力を一切投げません。
これを繰り返すことによって、リンゴが壊れた個数を数えることができます。
使用例①(応用編):ボタンを押した回数を数える
応用編として、カウンターノードンを使うことで、
ボタンを押した回数を数えることができます。
このギミックは、レッスン5「謎解きの部屋」で使われています。
(さわっているノードンを使っていますが。)
2021/09執筆現在、さわっているノードンの仕様を詳細に調査できていないため、
今後追記して解説してみます。
使用例②:時間の表示
②-1:経過時間の表示
例えば、

「エキサイトレーシング」(レッスン6)にタイムを表示させたい!
なんてアイデアを形にすることができます。
どのように実現させるかというと、
- あるべき姿:1秒後に1を表示させる
- 手段:
- 1秒後(60/60秒後)にたまった60を1として表示させる
- 1秒おきに1を出力して表示させる
圧倒的に①のほうが簡単なので、①の仕組みを図解付きで解説します。
(①のほうが簡単というより、②を再現する方法が思い浮かびませんでした
まだまだ精進しないといけないですね。)



以上のプログラミングによって、「マッピングノードンの出力」に経過時間が表示されるようになります。
(参考に、カウンターノードンからの出力も表示するようにしました。)
②-2:残り時間の表示
○○秒以内に脱出せよ!

みたいなゲームを作りたいときに使うことができます。
基本的な考え方は、
こちらも、レッスン2「コロコロボール」にて作る、リンゴを数える仕組みと同じものです。
表示したい時間は、
制限時間-経過時間
で表すことができます。
先程説明した経過時間の表示の仕組みに
最後制限時間と、引き算を加えればよいだけです。

すると、残り時間の表示を行うことができます。
カウンターノードンと時間表示 解説まとめ
今回は、 「ナビつき!つくってわかる はじめてゲームプログラミング」
(はじプロ)のカウンターノードンの解説 を行っていきました。
- カウンターノードンは数を数えるノードン
- 1/60秒ごとに情報は更新される=1秒間で60回の処理が行われる
- マッピングノードンを組み合わせて1秒を作り上げよう
これを活用して、
- ゲームにハラハラ感を加えるもよし
- 残り○○秒になったら演出を変えるもよし
たくさんの活用方法が考えられますので、是非色々と試してみてください。
では、次の記事までごきげんよう。
コメント
3.2の手段②は[定数]-[タイマー]-増やす[カウンター]でできますよ。
全部初期設定で大丈夫です。
3.3でした。すみません。
>>名ありさん
ご指摘くださりありがとうございました。
確かに[定数]-[タイマー]-増やす[カウンター]でもできますね。
しかもこちらのほうがイメージもしやすく簡単です。
私の頭が硬かったですね・・・。
ただ、プログラミングにおいて正解は一つではない、といういい例になりました。