今日の設計

・復讐設計変更

昨日課題として出てきたステージの管理方法。もともとは敵をステージ内でどのように管理するかというところからでてきたのだが、その設計を考えていたら、ステージを使ってゲーム内の全てのオブジェクトを管理してしまうということになった。

大幅な設計の変更だったので、Poseidon付属のファイル圧縮機能を使ってバックアップをとってから組み始めた。それで、予測したとおりに動かなくなったので、バックアップを参考にして調べようということになったら、圧縮されたファイルが解凍できなくてはまった。結局フラッシュメモリに以前バックアップしたソースを参照した。

それでも詰んでいて、原因不明で呻っていたら原因が見つかった。原因は、コンストラクタ内で生成中のオブジェクトを参照していることだった。冷静になって考えてみれば、

hoge = new Hoge();

と書いた時に、コンストラクタが終わるまではhogeに値は返されず、そのためコンストラクタの中ではhogeは初期化されないのだから当たり前といえば当たり前。結局コンストラクタ内に書いてあった処理を丸々別の関数に移転して、コンストラクタが終わったあとにその関数を呼び出して解決。