前の開発日記 | 次の開発日記 | 一覧 |
ただいま、実家に帰っております。実家は開発環境が無いので、 だらだらと駄文を書いて過ごすのみです。
今まで、私は何度かゲームのアーキテクチャを設計したが、
今現在、それらが良いアーキテクチャだったとはちょっと思えません。
そこで、SVGの練習を兼ね、今までどんなアーキテクチャで、どんな点が失敗だと思ったのか
説明して行きます。
まず最初に、結構昔使っていたアーキテクチャとその問題点を説明します。例としてRPGを使います。
UMLのクラス図で書くと、こんなクラス構成となっておりました。
なお、これは抽象的な図であり、正確に書いたものでは有りません。
ざっと説明しますと、Stateパターンが中核となっています。
ユーザの入力等により、Gameクラスの状態が、Title,Field,Battleのどれかを取ります。
Titleはゲームの状態がタイトル、すなわちタイトル画面制御用のクラスで、
Fieldは、フィールド画面制御用のクラスで、Battleは戦闘画面制御用のクラスです。
フィールド画面をうろついていると、突然戦闘画面に切り替わるようなゲームだったと思って下さい。
Title,Field,Battleはそれぞれ複数のGameObjectを持っていて、これらが画面上のキャラクタやマップやテキスト等を表します。
Title,Field,Battleは、自身が所有しているGameObjectを全て行動させたり、表示させたりすることによりゲームを進めます。
ある特定のGameObjectが、ある特定の状態になったら、Gameのstateが他のものに切り替わります。例えば、こんなときです。
しかし、この構成には、次のような問題点がありました。
これらの問題は、結局無理やり実装して解決しました。 グローバル変数のようなものを一つ二つ追加すれば、大概の問題は片がつきます。 その後の保守/修正が面倒になるだけです。
ゲームの開発では、途中で仕様変更はぼこぼこ入りますし、
ソースコードの使いまわしというのもなかなか難しいものです。
よってゲームの全体的な設計を行うときに目指すものは、再利用性ではなく、
実装量を減らせるような設計ではないかと思います。
具体的には、
ということになるのではないかと思います。
(2002/12/29) 細かい点を何点か変更しました。
(2003/01/05) 強調する部分に色を付けました。
前の開発日記 | 次の開発日記 | 一覧 |