ゲーム開発方法の変更

RPGAVGなどアクション系や画面全体を頻繁に書き換えるタイプのゲームじゃない場合、開発手法を変えてみたいと思う。


基本となるゲーム開発は1フレーム単位で「処理」=>「レンダリング」を無限ループで繰り返すこと。

オブジェクト指向が入り関数ベースの開発に比べて大幅に「処理」部分が改善された。レンダリングフレームバッファ方式により柔軟性が生まれた。


アクション系の場合このままでよいのだが、RPGとかになるとやはり面倒だ。処理はフレーム単位で考えるというより、一連の流れとなる処理が必要で、その部分をスクリプト等で書いていくことは多い。また、マルチウインドウ方式(といいつつ、単純にもとのウインドウの消去等をしていないだけ。ラインバッファでBGベースのVRAM+スプライトをもつが故)の場合ダブルバッファだと毎回描画する必要が出てきてレトロRPGのような雰囲気が出しにくい。


そこで便宜上、各ステータス等データを「モデル」、各ウインドウなど意味のあるものをコンポーネント化し「View」とし、処理の流れのスクリプトやプレイヤーからの入力処理をいわば「コントローラ」とする。


具体的にはたとえばSwingで開発する場合、各ウインドウなどのエリアを独立したコンポーネントとして配置。重ねあわせにはレイヤードペインあたりで処理が理想か。

Modelからコンポーネントへの反映はBeansBindingを利用し、Modelをかえると自動でコンポーネントに描画結果が反映される。

ただし、直接的に表示するコンポーネントへのプロパティをいじるのではなく、たとえばダメージを受けた場合、ダメージメソッドを呼び出してその結果、HPが減ったり戦闘不能になったりした結果、赤い文字の色になったりするようにどんどんModel同士で伝播させていく。


まだそれぞれのコンポーネントのプロパティとかどうしようかとかは考えてないけど、こういった考え方だとこんな感じでぽとぺたで画面考えることが出来ますよね。

http://shin.cside.com/diary/2010/0706-01.png
とりあえず各ウインドウはSwingのボーダーで描画してます。なんかどっかで見たことがあるような配置ですね。
http://www.google.co.jp/images?um=1&hl=ja&c2coff=1&tbs=isch%3A1&sa=1&q=Wizardry+fc&aq=f&aqi=&aql=&oq=&gs_rfai=
気のせいですね。


とするとたぶんプログラムの考え方が大幅に変わるんじゃないかなぁという気はする。もっとも、今では商用ソフトならばそういったプログラミングは普通だと思いますけど、同人系だとまだあんまりないかなぁとか勝手におもったり。