フリーゲーム・フリーソフトの開発過程を記録していく、TDtechnic公式ブログです。製品はカテゴリの「ダウンロード場」からダウンロードして頂けます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

こんにちは。昨日はとんでもないバグに見舞われました…。

というのは、「フルスクリーンで起動中(画面が不安定なとき)にAlt+F4を押すとアクセス違反が発生する」というものです。しかも、その例外を返しているのが、Windowsプログラマーの皆さんならお馴染み、DispatchMessage関数だというのです。

ちょっと待て。DispatchMessageが例外返すなんて聞いたことないぞ。記憶は同じ操作しても大丈夫でした。それにWindowsプログラムの根幹ですから、この関数自体に不具合はないと思っていいでしょう。

その後コードの各部を取っ替え引っ替えしていたところ、自作のリソースクラスがどうも関係しているようなのです。これは、ゲームで使う画像などをまとめたファイルをゲーム実行時に展開するためのもので、アーカイバとして7-ZIP32.DLLを使わせて頂いております。そして、その展開動作はゲーム起動時に一回だけ行うのですが、そのタイミングが怪しいと睨みました。

とりあえずDirectXのデバイス初期化前(画面が不安定になる前)で展開するように変更してみました。するとどうでしょう。何度強引な操作をしても正常に終了できるようになりました。要するに展開中にデバイスをいじるなということですね。そして7-ZIPはDLLなので例外が発生してもデバッガには直接表示されず、何らかのルートを通ってDispatchMessageから返ってきたということでしょう。とりあえずこの問題は解決です。

今日はマウス関連のクラスを完成させました。ゲーム中のマウスの移動を考えると、実際のマウスカーソルの動きをそのまま拾うわけにはいかないので(こうするとウィンドウの大きさによってマウスの感度が変わってしまったり、画面端にカーソルが行った時の処理が面倒になったりする)ので、記憶と同じくDirectInputを使って独自座標系で操作するようにしました。ただし!今回は記憶とは一味違いますよ。内部処理がより洗練されているのはもちろんのこと、カーソルがウィンドウ外に出入りする時の独自座標系との境目が、かなり自然になりました。記憶の時より遥かに違和感なく操作できると思います。無論、フルスクリーンだと全く関係ないですけどね(笑)。

ということでね、これからはまたメニュー画面などを作ります。失礼します。
関連記事

[2014/03/17 15:41] | 不死女 -Immortal girl-
|
コメント:
この記事へのコメント:
コメント:を投稿
URL:

パスワード:
非公開コメント: 管理者にだけ表示を許可
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。