×で終了した時の処理
×で終了した時の処理
DXライブラリのウィンドウを「×」とか「Alt+F4」で閉じた場合は
どのような手順で終了されているのでしょうか?
私はDxLib_End();の前にデータをセーブする処理を行っているのですが
上のような方法で終了したら、DxLib_End();を通ってくれないのでしょうかね・・
そうだとするとかなり問題なんですが・・
どのような手順で終了されているのでしょうか?
私はDxLib_End();の前にデータをセーブする処理を行っているのですが
上のような方法で終了したら、DxLib_End();を通ってくれないのでしょうかね・・
そうだとするとかなり問題なんですが・・
Re:×で終了した時の処理
ProcessMessage で×が押されたとき等の処理をしていると思いますので (多分ですが...
(ウィンドウプロシージャのメッセージ処理?)
この関数が -1 を返した時、メインループを抜けて即セーブすればよいと思います
悩むより一度自分でやってみることをお勧めします ^^
(ウィンドウプロシージャのメッセージ処理?)
この関数が -1 を返した時、メインループを抜けて即セーブすればよいと思います
悩むより一度自分でやってみることをお勧めします ^^
Re:×で終了した時の処理
フレームと言いますか
WinMain関数 が return するまでの間、ですかね
ですが、なるべく早めに終了させなければならないそうです
http://homepage2.nifty.com/natupaji/DxL ... .html#R1N3
WinMain関数 が return するまでの間、ですかね
ですが、なるべく早めに終了させなければならないそうです
http://homepage2.nifty.com/natupaji/DxL ... .html#R1N3
Re:×で終了した時の処理
SendMessageについてはよくわかりませんでしたが
と言う事はProcessMessageが-1になった時に強制的にWinMain関数まで戻ってreturnするのでしょうか?
と言う事はProcessMessageが-1になった時に強制的にWinMain関数まで戻ってreturnするのでしょうか?
Re:×で終了した時の処理
電話で例えるならProcessMessageは留守録を見る行為、SendMessageは着信だとしたら
留守録を見て着信が来てたら終わる。留守録を見ないと着信があったか分からない。
つまりProcessMessage関数実行時に「何か終了命令あった?」って逐次聞いてるわけです。
WinMainに干渉するわけじゃないです。
留守録を見て着信が来てたら終わる。留守録を見ないと着信があったか分からない。
つまりProcessMessage関数実行時に「何か終了命令あった?」って逐次聞いてるわけです。
WinMainに干渉するわけじゃないです。
Re:×で終了した時の処理
あ~なるほどそういう事ですか
しかしProcessMessageはループのある場所では大体呼んでいますから
ProcessMessageごと関数で囲んで置き換えるしかないんでしょうかね・・
でもProcessMessage実行時に終了命令があるか確認するとしても
戻り値を返すと言う事はProcessMessage内で終了されているわけでは無さそうですね・・
いったいどこで終了されているのでしょうか?
しかしProcessMessageはループのある場所では大体呼んでいますから
ProcessMessageごと関数で囲んで置き換えるしかないんでしょうかね・・
でもProcessMessage実行時に終了命令があるか確認するとしても
戻り値を返すと言う事はProcessMessage内で終了されているわけでは無さそうですね・・
いったいどこで終了されているのでしょうか?
Re:×で終了した時の処理
中でやっていることの話をすると、Windows API のメッセージループの話になってしまいますが、
このメッセージループの処理で、「×で閉じた」というメッセージが送信され、
DXライブラリでは、これを受信したとき、「終了させるタイミング」と判断し、終了の意味を示す値を返しているだけです。
返しているだけなので、内部では終了処理自体してません。
終了処理をするのは、自ら書いたコード(DxLib_End を呼び出すなど)で行います。
このメッセージループの処理で、「×で閉じた」というメッセージが送信され、
DXライブラリでは、これを受信したとき、「終了させるタイミング」と判断し、終了の意味を示す値を返しているだけです。
返しているだけなので、内部では終了処理自体してません。
終了処理をするのは、自ら書いたコード(DxLib_End を呼び出すなど)で行います。
Re:×で終了した時の処理
主題を見逃してましたが、チルチルさんのしようとしてる事は多分無理です。
明示的でない終了のタイミングでのファイルのやりとりは中断される可能性もありますし、書き込むメモリが正常な保証もありません。
差分ファイルも作ってないならドラクエで言えば「ぼうけんのしょはきえてしまいました」って事になります。
セーブ自体の設計を再考してみてはどうでしょうか?
明示的でない終了のタイミングでのファイルのやりとりは中断される可能性もありますし、書き込むメモリが正常な保証もありません。
差分ファイルも作ってないならドラクエで言えば「ぼうけんのしょはきえてしまいました」って事になります。
セーブ自体の設計を再考してみてはどうでしょうか?
Re:×で終了した時の処理
>> ねこ様
>> 明示的でない終了のタイミングでのファイルのやりとりは中断される可能性もありますし、
>> 書き込むメモリが正常な保証もありません。
そうなのですか...
自分は結構危険なことをしていたのですね;
うまくいったので良しとしていました...
ありがとうございます
>> チルチル様
適切ではないことを言ってすみませんでした orz
>> 明示的でない終了のタイミングでのファイルのやりとりは中断される可能性もありますし、
>> 書き込むメモリが正常な保証もありません。
そうなのですか...
自分は結構危険なことをしていたのですね;
うまくいったので良しとしていました...
ありがとうございます
>> チルチル様
適切ではないことを言ってすみませんでした orz
Re:×で終了した時の処理
う~ん、では毎フレームセーブするか
クリアした時にでも記録する事にしてみます
しかし明示的でないタイミングの処理が無理なら
たまにゲームなんかで×を押すと「終了しますか?」
みたいなウィンドウが出ますけど、アレはまた別の何かなんでしょうか?
そういえば龍神録は×を押しても終了しませんがアレもまた別の何かなんでしょうか?
クリアした時にでも記録する事にしてみます
しかし明示的でないタイミングの処理が無理なら
たまにゲームなんかで×を押すと「終了しますか?」
みたいなウィンドウが出ますけど、アレはまた別の何かなんでしょうか?
そういえば龍神録は×を押しても終了しませんがアレもまた別の何かなんでしょうか?
Re:×で終了した時の処理
>> チルチル様
Windowsプログラミングを少しかじれば、
そこら辺のことは見えてくるかと思います
(まだWinAPIの勉強を始めて1週間しか経過していない自分が言うのもあれですが....)
つまり
御津凪様が仰られたように
終了は自身が書いたコードで行われます
ですので
×ボタンが押された → メッセージボックス表示 → 戻り値がtrueなら終了
という感じにもできるかと思います
よくある「終了しますか?」はMessageBox()で簡単にできます
>> そういえば龍神録は×を押しても終了しませんがアレもまた別の何かなんでしょうか?
これはDXライブラリ側で関数が用意されています
SetWindowUserCloseEnableFlag( int Flag );
Windowsプログラミングを少しかじれば、
そこら辺のことは見えてくるかと思います
(まだWinAPIの勉強を始めて1週間しか経過していない自分が言うのもあれですが....)
つまり
御津凪様が仰られたように
終了は自身が書いたコードで行われます
ですので
×ボタンが押された → メッセージボックス表示 → 戻り値がtrueなら終了
という感じにもできるかと思います
よくある「終了しますか?」はMessageBox()で簡単にできます
>> そういえば龍神録は×を押しても終了しませんがアレもまた別の何かなんでしょうか?
これはDXライブラリ側で関数が用意されています
SetWindowUserCloseEnableFlag( int Flag );
Re:×で終了した時の処理
なるほどこんな関数もあったんですね
APIなどは今の実力では無理そうなので
そのうち勉強してみます
とりあえず終了時以外にセーブポイントを追加してみます
どうもありがとうございました
APIなどは今の実力では無理そうなので
そのうち勉強してみます
とりあえず終了時以外にセーブポイントを追加してみます
どうもありがとうございました