まだまだ勉強不足・・・

前から作ってると言ってるが実際作ってるのかどうかもあやしくなってきたあのシューティングだが、やっぱり早いトコ区切りを付けたいということで、タスクシステムを用いたバージョンへの移項作業をせこせこやっている。といっても全然大変な量じゃなくて、気合入れれば数日どころか1日で終わりそうなものだったのだが。集中力がないなあ…。
だらだらとやっているうちに前から抱いていた心のもやもや。どうもゲームを作る上でC++言語というものをうまく使えていない。特に顕著だと思うのは、継承の周りの機能だ。
一番の例だとキャラクタの継承系。1フレームの処理を各キャラクタに任せるためにキャラクタ基底クラスへのポインタをコンテナに持っておいて、イテレーションをかける。コレだけなら簡単なのだが、あるキャラクタが別のキャラクタとの間で何かごにょごにょやりたい場合だと話が変わってくる。まず相手のキャラクタを探し当てるためにコンテナを漁らなければならない。コンテナの持つポインタ型は全てキャラクタ基底クラス型。どれが敵でどれが弾でどれが自機なのかはわからない。それを知りたいならキャラクタ基底クラスに型判定仮想関数を付けておけばいい。しかしさらに、そうやって探し当てた相手のキャラクタに対してなんらかの関数を呼びたい、それが基底クラスにない関数だったら。ということで結局static_castを発動(さすがにdynamic_castやRTTIはまだ使う勇気がない´∀)。
とりあえずの継承でコードの重複が減るというのはいいのだが、型判定+static_castだらけのコードというのはやっぱC++としてどうか。C++オブジェクト指向言語から単なるプログラミング言語に劣化キャストして使っているようなものだ。うん。キャスト絡みで言いえて妙ですね(´・ω・`)

追記

http://d.hatena.ne.jp/isshiki/20051209
http://d.hatena.ne.jp/shinichiro_h/20051210

やはりどうもC++はシューティングには不向きなようですね。
前からどーもおかしいとは思ってたんだよ(´・ω・`)