DxLibでゲームを作るときに、様々なイベントをRxのStreamとして設計できないか気になり試してみました。 UniRxなどあるように、ゲーム開発自体でRxを使うことは実績がありますね。
サンプルコードはZキーの入力をObservableとしてSubscribeするプログラムになります。
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つの処理を書くことでゲームの複雑な処理も読みやすく書けそうだという感想を持ちました。