土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

シーン管理についての疑問

 ひとまず、今感じている疑問についてメモっておく。

 何年か前にC++でゲームフレームワークを作ろうとした時に色々考えて、結局結論が出なかった物の1つにシーン管理がある。当時なにを考えていたのかはあんまり覚えていないのだけど、課題の1つが「同時起動するシーンというのは存在しうるか」という物だった。

 簡単に例を挙げると、ノベルゲームの通常画面をメインシーン、右クリックでメニューが表れる時をメニューシーンとして、メインシーンでテキストを表示し、クリック待ちアイコンが点滅アニメしている時に、右クリックでメニューを表示させた(メニューシーンに移行させた)とする。

 この時、メニューの背景ではメインシーンの表示を続け、かつ、クリック待ちアイコンの点滅アニメを止めたくないとする。しかし、ユーザーのUIアクセスはメニュー側で独占したい。という状況が起きる。この時、メインシーンとメニューシーンはマルチタスク的に動いており、ユーザーからのアクセスはメニューシーンだけがフックしている形になると思うのだが、これはどう実装すればいいのだろう?

 このマルチタスク的に動作するシーンはいわゆる「シーン遷移」で使われる物と同じ扱いなのだろうか? それとも異なる概念の実装になるのだろうか? また、「アクティブなシーンが、ユーザーの入力を独占する」というルールは普遍的に用いることのできる物なのだろうか?

 例えば(イマドキはそんなゲーム存在しないけど)画面を2分割して、対戦プレイできるゲームがあったとして、右半分にはゲームパッドA、左半分にはゲームパッドBが入力を受け付けるとした場合、この右半分/左半分は、それぞれ別のシーンとして実装すれば良いのだろうか? この場合「アクティブなシーン」が複数あることにならないか?

 これらは汎用的に実装できる物なのか。できないとすればそれは何故なのか。あと、どこかでmirichiさんが書いていた気がするのだけど、シーンの切り替え記述がコード上に散らばってしまうのは、メンテ効率が悪い。出来ればひとまとまりにしておきたいし、もっと言えば外部DSLで管理出来る方がいい。それを汎用的に実装できるのか。