HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0225
ひろかずhspdx使用時におけるウィンドウ変更時の処理について3解決


ひろかず

リンク

2018/2/25(Sun) 20:38:01|NO.82566

hspdxを使用してフルスクリーンのゲームを作成しているのですが、分からない点があるので質問
させて頂きます。

今まで、フルスクリーンモード中に、alt+tabや他アプリケーションによるフルスクリーンの解除が
された時の対処を取っていなかったので、フルスクリーンが解除された時に、ゲームがエラーで
終了する状態となっていました。

最近になってhspdxに「es_bufcheck」という、それに対応した命令がある事を知りました。
この命令は、「ウィンドウのフォーカスとバッファのロストを監視し、フォーカスが別ウィンドウに
移ったときは実行を停止し、バッファのロストが生じたときはそのバッファの復元を行った後
statに1を返す」というものです。
この命令を組み込んだおかげで、エラー終了する事は無くなったのですが、問題点があります。

DirectXの仕様で、別ウィンドウにフォーカスが移ると、vramの内容が消失する場合があるとの事で、
ウィンドウのフォーカスが再び自分のゲームに戻った時に、自前でvramの内容を復帰させなければ
なりません。
マップチップやスプライトデータなど、fileで存在するものは、ただ単にfileを再読み込みすれば
解決します。
しかし、vramにはその他に、それらの画像データを元に加工した一時的な画像データが存在する為、
それをどうやって復帰させたら良いのか頭を悩ませています。

もし、ウィンドウのフォーカスが移るのを直前に検知する方法があれば、vramの内容が消失する前に
一時fileとして待避したいと考えているのですが、そういった手段は可能なのでしょうか?

そういった手段が取れないとしたら、どういった対応を取れば良いのでしょうか?
以上、よろしくお願い申し上げます。



この記事に返信する


あまら

リンク

2018/2/25(Sun) 21:35:29|NO.82568

> vramにはその他に、それらの画像データを元に加工した一時的な画像データが存在する
一時的な画像データをどのような形で存在しているのかはわかりませんが、
消える可能性のあるバッファはHSPDXのバッファ(es_bufferなど)だけで、
HSP通常命令のbufferは消えません。

よってes_getbufを使って一時的な画像データをHSPバッファへコピーすれば、
bsaveでファイルに保存することもできますし、
わざわざファイルにしなくてもHSPバッファから再度HSPDXのバッファへコピーとするだけでも
大丈夫なはずです。



あまら

リンク

2018/2/25(Sun) 22:54:43|NO.82569

失礼、微妙に回答になっていませんでしたね。

直前に検知というのは難しいのではないかと思います。
ALTキーが押された場合、TABキーがどうであれ念のためバックアップを取っておく
という形で上記の方法でHSPバッファにコピーしておく事は可能だと思います。

しかし他アプリケーションはどうしようもないですね。
API利用で最前面のウィンドウを取得はできますが、
その時点でバッファがロストしているでしょうから。


加工した一時的な画像データの作成方法にもよりますが、
始めからHSPバッファ上で加工しておけばes_getbufを使わなくても
消えることもなく、HSPDXに移すのもes_bufferだけで済みます。

>マップチップやスプライトデータなど、fileで存在するものは、ただ単にfileを再読み込みすれば解決します。
これもわざわざファイルを再読み込みしなくても
ファイルごとにそれぞれ別のHSPバッファに読み込み、es_bufferで転送をしておけば
ロストからの復帰時に再度HSPバッファから転送するだけで済むのではないでしょうか。



ひろかず

リンク

2018/2/26(Mon) 23:45:09|NO.82573

>>あまらさん
ご回答頂き、誠に有難うございます。
直前に検知というのは難しいですか。

HSPのバッファに保存するというのは考えの中にありませんでした。
確かに、その方法でうまく出来そうです。
有難うございました。



ONION software Copyright 1997-2023(c) All rights reserved.