C++と色々

主にC++やプログラムに関する記事を投稿します。

DxLibとRxCppを合わせてみた

DxLibでゲームを作るときに、様々なイベントをRxのStreamとして設計できないか気になり試してみました。 UniRxなどあるように、ゲーム開発自体でRxを使うことは実績がありますね。

サンプルコードはZキーの入力をObservableとしてSubscribeするプログラムになります。

gist.github.com

L9のInputクラスのupdateメソッドで毎フレームDxLibのGetHitKeyStateAllを呼び出し、zキーを入力をon_nextに渡し続けています。
L30とL35でそれぞれメインループに入る前に、Zキーの入力によって行いたい処理を記述しています。
L30はZキーが押されている間だけcounterをインクリメントする処理です。
filterで押されている間だけ間引いています。
L35はZキーが離された瞬間だけ背景色を赤にする、という処理です。 bufferで現在のフレームと1フレーム前のZキーの入力の配列をとり、前のフレームの入力が1かつ現在のフレームの入力が0の場合のみreleasedをtrueにしています。

Zキーの入力の入力の仕方や行いたい処理ごとにSubscribeを書いています。
Observableのメソッドチェインで宣言的に書け、また1つのSubscribeで1つの処理を書くことでゲームの複雑な処理も読みやすく書けそうだという感想を持ちました。