開発日誌

11日に合宿終わりました。帰ってから超時間睡眠を2回繰り返した気がする。仕方ないね。最終日のアレはもしかしたら徹マンっていうんじゃないのか?うん、あれはよくないと思った。


だってほら、夏休みはこれやるつもりだったじゃない?まあ今あるのが間違って持ってきた壊れた旧ゲームパッドで非想天則は論外、星蓮船はキーボードプレイ、ポケモンとかどうせ売り切れだろ状態で他にやることがなくなったのが理由だけど…


(壊れた)パッドをつないでいたので分かったことだがパッドのIDirectInputDevice8*をスマートポインタに突っ込む時に、Relaseするデリータを指定し忘れてデフォルトでdeleteかけられてぶっ壊れた。テストしとけよ…。


DirectSoundとDirectInputが適当のままだけどDirectGraphicsへ。クリアすべき課題はFPSと垂直同期関係、ウィンドウ・フルスクリーン切り替え、デバイスロスト対応。なんだかんだでゲームをやるだけの人も覚えておくとよい知識としては、フルスクリーンモードでは一応ディスプレイのリフレッシュレートの変更を要求できるが、対応していないことも多い?、かつウィンドウモードでは無理。フルスクリーン・ウィンドウどちらでも垂直同期をとる・とらないは選択可能。ここをどうするかは非常に迷うところだけどタイマーでFPSを保ちつつ垂直同期もとって「画面のリフレッシュレートは60Hzがいいですよ」と言っておくあたりが無難か?まあ設定に「垂直同期をとる」ってのを用意するのもよくあるかな。
あと、ウィンドウ・フルスクリーン切り替えとデバイスロストからの復帰を行う前にはビデオメモリにリソースを全て解放してからデバイスのリセットを行う必要がある。もちろんそのあとゲームを再開するには解放したリソースを再度ロードしなおす必要がある。特にこれらの事態がゲームのあらゆる場面で起こる可能性がある。ま、D3DPOOL_DEFAULT指定して作ったものだけなんだけどね。ただ、SpriteだとかFontだとかのD3DXユーティリティインターフェースを固定数使うだけならグローバルに置いて解放関数と復帰関数を書いて終わりだろうけど、場面によってロードされたり解放されたりするテクスチャ(画像)も対応させようとするとマジキチ。C++ポリモーフィズムSTLをフル活用してやっと何とかなるレベルでしょう。この辺りは本当に先まで見据えないとやばい。


フルスクリーンからウィンドウに切り替えた直後にエラーになるんで付近にブレークポイントかけたらCtrl+Alt+Deleteくらいしか効かなくなって解像度が下がったままで出てきたタスクマネージャがクリックも何も反応しないしえらいことになりました。たまらねぇ。