Re: Dxアーカイブからフォントを読み込みたい ( No.3 ) |
- 名前:にこよう 日時:2019/09/08 23:54
ご返信ありがとうございます
>DXアーカイブを使用しない方法では正常に動作しますでしょうか?
Dxアーカイブがなくても同じ挙動だと思うので、Dxアーカイブを使用せずに試していました。
>ウィンドウが最小化されているなどして、描画できない状態でDrawExtendGraphが実行された
ウィンドウは手前で確認できる状態でした。
描画できていないのを確認したうえで画面に返り値を描画したりしていたので違うと思われます。
>DrawExtendGraph( 0, 0, 0, 0, GrHandle, TRUE ); など、面積0の座標指定で関数が呼ばれた
一時止めて確認してみましたが、問題ありませんでした
(一応DrawBoxに同じ変数を渡して描画してみたところ描画されました)
>どこかでグラフィックハンドルを削除してしまっている
ゲーム内でグラフィックハンドルを削除する関数を使っているのは
分割画像を読み込んで一定時間がたったら分割したハンドルを一つずつ削除しているエフェクト用の関数のみで、
ゲーム内の画像を間違って消すことはないと思われます
(分割読み込みを行った画像はどれか一つだけのハンドルしか削除してはいけないとかでなければ問題ないと思われます)
すみません、もう少し原因を考えてみますm(__)m
|
Re: Dxアーカイブからフォントを読み込みたい ( No.4 ) |
- 名前:にこよう 日時:2019/09/09 18:50
DrawExtendGraphは、画像を読み込む際に範囲指定が1ピクセルずれていたのが原因で正常に描画できていませんでした
お手間をおかけしました
今回の件で思ったのですが、画像を分割して読み込む際に分割後の一つの画像サイズを元画像より大きく指定してしまっていた場合、
左上の方(サイズ的に分割可能な部分)の画像を分割して描画できるようにするか、
ハンドルとして-1を格納するようににしたほうが分かりやすいのではないでしょうか?
スレッドに関係ない提案で申し訳ないですm(__)m
|
Re: Dxアーカイブからフォントを読み込みたい ( No.5 ) |
- 名前:管理人 日時:2019/09/09 23:16
> 今回の件で思ったのですが、画像を分割して読み込む際に分割後の一つの画像サイズを元画像より大きく指定してしまっていた場合、
> 左上の方(サイズ的に分割可能な部分)の画像を分割して描画できるようにするか、
> ハンドルとして-1を格納するようににしたほうが分かりやすいのではないでしょうか?
すみません、『画像を分割して読み込む』というのは LoadDivGraph や CreateDivGraphFromMem などの Div系の関数のことでしょうか?
それとも DerivationGraph などの具体的な抜き出し範囲を指定する関数のことでしょうか?
|
Re: Dxアーカイブからフォントを読み込みたい ( No.6 ) |
- 名前:にこよう 日時:2019/09/10 00:23
>すみません、『画像を分割して読み込む』というのは LoadDivGraph や CreateDivGraphFromMem などの Div系の関数のことでしょうか?
LoadDivGraph関数です
|
Re: Dxアーカイブからフォントを読み込みたい ( No.7 ) |
- 名前:管理人 日時:2019/09/11 00:22
|
Re: Dxアーカイブからフォントを読み込みたい ( No.8 ) |
- 名前:にこよう 日時:2019/09/12 20:18
色々試してみたのですが、-1を格納することができませんでした。
お手数ですが、ライブラリの確認をお願いしたいですm(__)m
|
Re: Dxアーカイブからフォントを読み込みたい ( No.9 ) |
- 名前:管理人 日時:2019/09/12 23:45
手元で
int GrHandle[ 10 ] ;
LoadDivGraph( "test2.bmp", 10 , 4 , 3 , 64 , 64 , GrHandle ) ;
というプログラムを実行してみたところ、GrHandle 配列の各要素に -1 が代入されました
( 第5,第6引数は正しくは 48, 56 で、64, 64 では画像サイズが足りない為エラーになり、
配列の各要素には -1 が代入され、戻り値も -1 になります )
にこようさんの環境では上記のようなプログラムを実行しても配列の各要素に -1 が代入
されないのでしょうか?
|
Re: Dxアーカイブからフォントを読み込みたい ( No.10 ) |
- 名前:にこよう 日時:2019/09/14 00:02
>にこようさんの環境では上記のようなプログラムを実行しても配列の各要素に -1 が代入されないのでしょうか?
すみません、非同期読み込みの存在を完全に忘れておりました
同期読み込みの状態で読み込めば正常に-が格納されるのを確認しましたm(__)m
Dxlibを使用する場合は非同期読み込みを使用することが多いと思うのですが、非同期読み込み時に-1を格納するのは難しいでしょうか?
また、これのお陰様で気が付くことが出来たのですが、フォントの読み込みエラーが発生していたのも非同期読み込み中に読み込んでいたからでした
(読み込み関連を一つの関数にまとめていたため非同期読み込みが解除される前に一番上のスレッドのコードを実行していました)
フォントを関連付ける?みたいな役割の関数はDXライブラリの関数ではないと思うのですが、何故ライブラリ内の同期読み込み設定が影響するのでしょうか?
(非同期読み込みはファイルの読み込みも順次行われて行くのでしょうか?)
|
Re: Dxアーカイブからフォントを読み込みたい ( No.11 ) |
- 名前:管理人 日時:2019/09/14 22:03
|
Re: Dxアーカイブからフォントを読み込みたい ( No.12 ) |
- 名前:にこよう 日時:2019/09/15 12:10
>非同期読み込みでも -1 が格納されるようにしてみましたので、よろしければお試しください m(_ _;m
実装ありがとうございます
しかし、確認するために新しいDxライブラリを使用して(以前のDxライブラリを使用していた時と同じコードで)
リビルドして実行してみたところ、画像等のローディング中に停止してしまいました
一度以前のDxに戻してリビルドしてみたところ正常に読み込めたのですが、再度、新しいDxライブラリを使用してみたところ、
やはりロードの途中で止まってしまいました
>まだファイルのオープンが完了しておらず FileRead_read が失敗する可能性があります
そうだったんですね、知りませんでした
ご丁寧に教えていただいてありがとうございます
無事正常に読み込むことに成功したので、一応パスを渡すだけで読み込める関数を貼っておきます
// Dxアーカイブやディレクトリから、フォントファイルを読み込む
int AddDxArchiveFontResource(LPCSTR FontPath)
{
int async_flag = GetUseASyncLoadFlag();
if (async_flag) SetUseASyncLoadFlag(FALSE); // もし非同期読み込み状態なら無効にする
int font_file_size = static_cast<int>(FileRead_size(FontPath)); // ファイルのサイズを得る
void* buffer = new void* [font_file_size]; // フォントデータ格納用のメモリ領域を確保
int font_file_handle = FileRead_open(FontPath); // フォントファイルを開く
if (font_file_handle == -1) // 失敗すれば
{
if (async_flag) SetUseASyncLoadFlag(TRUE); // 非同期読み込みを有効にする
return -1;
}
FileRead_read(buffer, font_file_size, font_file_handle); // フォントファイルを丸ごとメモリに読み込む
FileRead_close(font_file_handle); // ファイルを閉じる
DWORD font_num = 0; // AddFontMemResourceEx引数用
if (AddFontMemResourceEx(buffer, font_file_size, NULL, &font_num) == 0) // メモリに読み込んだフォントデータをシステムに追加
{
//ERR_GL("フォントデータの読み込みに失敗しました");
if (async_flag) SetUseASyncLoadFlag(TRUE); // 非同期読み込みを有効にする
return -1;
}
delete[] buffer; // メモリを開放する
if (async_flag) SetUseASyncLoadFlag(TRUE); // 非同期読み込みを有効にする
return 0;
}
|
Re: Dxアーカイブからフォントを読み込みたい ( No.13 ) |
- 名前:管理人 日時:2019/09/15 12:50
> しかし、確認するために新しいDxライブラリを使用して(以前のDxライブラリを使用していた時と同じコードで)
> リビルドして実行してみたところ、画像等のローディング中に停止してしまいました
非同期読み込みを使わなくても停止してしまいますでしょうか?
あと、今回非同期読み込みに失敗していたら -1 を代入するようにするために、LoadDivGraph で渡した
『グラフィックハンドルを格納する配列のアドレス』を非同期読み込み中ずっと使用するようにしています
なので、非同期読み込みの関数呼び出しにローカル変数を使うと恐らく正常に動作しません
// 今までは大丈夫で、今回から駄目になった書き方
int GlobalGrHandle[ 10 ];
void LoadImage( void )
{
int LocalGrHandle[ 10 ];
// 非同期読み込みON
SetUseASyncLoadFlag( TRUE );
// とりあえずローカル変数にハンドルを入れる
LoadDivGraph( "test2.bmp" , 10 , 4 , 3 , 48 , 56 , LocalGrHandle ) ;
// ローカル変数に格納されたハンドルをグローバル変数にハンドルを入れる
for( int i = 0; i < 10; i++ )
GlobalGrHandle[ i ] = LocalGrHandle[ i ];
// 関数から出ると LocalGrHandle が無効になってしまうので×
// ( 非同期読み込み処理は LocalGrHandle の中の数値を使うため )
}
↑こちらのような例はありませんでしょうか?
> 無事正常に読み込むことに成功したので、一応パスを渡すだけで読み込める関数を貼っておきます
ありがとうございます
解決したようで何よりです
|
Re: Dxアーカイブからフォントを読み込みたい ( No.14 ) |
- 名前:にこよう 日時:2019/09/15 14:13
>↑こちらのような例はありませんでしょうか?
正にそのような書き方をしておりました
画像分割数のポインターを渡し、一部不要な画像を除き、順番を変更して別の構造体に格納し直すということをやっております
-1を格納するためにはこのような処理になってしまうのですね...
これを変更して対処することは出来るのですが、Dxライブラリのアップデートとして変更してしまうのは、
少し問題があるように感じます
元の使用に戻してしまうか、パスを渡した時点で、大きさのエラーチェックだけを行ってしまうかしたほうが良いのではないでしょうか?
(実装していただいたうえで初心者の意見ですみません)
|
Re: Dxアーカイブからフォントを読み込みたい ( No.15 ) |
- 名前:管理人 日時:2019/09/16 03:26
> これを変更して対処することは出来るのですが、Dxライブラリのアップデートとして変更してしまうのは、
> 少し問題があるように感じます
うーん、薄々そのように思っていましたが、早速問題が発生してしまいましたね…
確かに元の仕様に戻した方が良さそうです
> 元の使用に戻してしまうか、パスを渡した時点で、大きさのエラーチェックだけを行ってしまうかしたほうが良いのではないでしょうか?
> (実装していただいたうえで初心者の意見ですみません)
大きさを取得するには画像ファイルを読み込む必要があり、非同期処理ではなくなってしまうのでできません
なので元の仕様に戻して、エラーについては大きさを間違えないようにしていただくしか無さそうです…
|
Re: Dxアーカイブからフォントを読み込みたい ( No.16 ) |
- 名前:にこよう 日時:2019/09/16 11:38
>大きさを取得するには画像ファイルを読み込む必要があり、非同期処理ではなくなってしまうのでできません
>なので元の仕様に戻して、エラーについては大きさを間違えないようにしていただくしか無さそうです…
そうなんですね、せっかく実装していただいたのに申し訳ないですm(__)m
エラーログに表示されるメッセージを(パスやファイル名を表示するなどして)詳しくする、などは難しいでしょうか?
また、一つ気になっていることがあるのですが、非同期読み込み時のログにおいて、同じフォルダ内で複数のファイルが見つから語った場合、
基本的に代表の?どれか一つがログに書き出されますが、まれに、フォルダ内の見つからないものすべてが出力されていたり、
全く出力されなかったりしますが、これは何故変化するのでしょうか...?
|
Re: Dxアーカイブからフォントを読み込みたい ( No.17 ) |
- 名前:管理人 日時:2019/09/17 06:01
|
Re: Dxアーカイブからフォントを読み込みたい ( No.18 ) |
- 名前:にこよう 日時:2019/09/18 02:06
>エラーログを追加しましたので、よろしければお試しください m(_ _)m
ありがとうございます
ファイルパスが出力されることを確認しました
ただ、ソースコードや画像をいじらずにDxライブラリをアップデートしたところ、今まで描画できていた分割画像が、
突然描画できなくなってしまいました
画像は30x43で16x43の2分割を指定していたため、読み込めないのが正常なのですが、今まで何故か読み込めていたようです
>今回のバージョンで Log.txt のオープンに失敗した場合は最大 5 秒間ファイルオープンをトライし続ける
>ようにしてみましたので、よろしければすべてのログが出力されるようになったかご確認ください m(_ _)m
400個ほどの(存在しない)音声ファイルと画像ファイルを読み込もうとしてみたのですが、一部しかログに出力されませんでした
また、ログに謎の空行が出来ているため一応ログファイルを貼り付けておきますm(__)m
1572:DXライブラリの初期化処理終了
1592:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\gamelib\circle_bar.png がありません
1859:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\logo.png がありません
1865:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\back\logo.png がありません
1870:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\back\difficulty.png がありません
1878:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\bamboo_chip_04.png がありません
1885:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\bamboo_chip_022.png がありません
1893:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\stone3.png がありません
1901:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\back\chip3_003.png がありません
1910:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\back\bamboo_chip_back1.png がありません
1919:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\back\mapchip05.png がありません
1927:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\item\cerulean0.png がありません
1935:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\item\s_exp4.png がありません
1943:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\bullet\b6.png のロードに失敗しました
1952:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chara\c4_1.png がありません
1961:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chara\c1_c.png がありません
1969:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chara\player0.png のロードに失敗しました
1978:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\back\event_back1.png がありません
1988:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\back5.png がありません
1996:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\mini_dragon.png のロードに失敗しました
2004:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\breakable\box.png がありません
2012:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\up\bamboo_chip_193.png がありません
2020:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\chip4_0_1.png のロードに失敗しました
2029:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\chip3_088.png がありません
2037:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\chip2_087.png がありません
2046:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\chip\block\chip1_2_2.png がありません
2053:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\bom_item.mp3
2063:Sound File Load Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\bom_item.mp3
2071:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\enemy_end0.mp3
2082:Sound File Load Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\enemy_end0.mp3
2094:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\effect\jump.png のロードに失敗しました
2104:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\bullet\laser2.png がありません
2114:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\title.mp3
2125:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\block.mp3
2134:Sound File Load Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\block.mp3
9567:ウインドウを閉じようとしています
|
Re: Dxアーカイブからフォントを読み込みたい ( No.19 ) |
- 名前:管理人 日時:2019/09/18 23:58
|
Re: Dxアーカイブからフォントを読み込みたい ( No.20 ) |
- 名前:にこよう 日時:2019/09/19 02:11
>根本的な対処としてにどれかのスレッドがログ出力処理をしていたら、他のスレッドはログ出力処理が終わるまで
>待たせるようにしました
対応ありがとうございます
正常にすべての読み込みエラーが出力されていることを確認しましたm(__)m
Dxライブラリを使用するうえでは全く支障はないのですが、謎の空行が出来るようです
(Log出力の処理を書いた覚えはないのですが、もしかしたら自分で書いたコードのせいかもしれません...)
6318:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\dragon2.png のロードに失敗しました
6325:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\dragon1.png のロードに失敗しました
6332:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\dragon0.png のロードに失敗しました
6340:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\hebimusume2.png のロードに失敗しました
6348:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\hebimusume1.png のロードに失敗しました
6356:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\kimaira.png のロードに失敗しました
6363:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\mini_dragon.png のロードに失敗しました
6373:画像ファイル C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\image\enemy\golem.png のロードに失敗しました
6380:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\map_edit.mp3
6389:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\boss03.ogg
6397:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\boss02.ogg
6405:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\stage02.mp3
6416:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\boss01.mp3
6427:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\stage01.mp3
6438:Sound File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\bgm\title.mp3
6448:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\break.wav
6460:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\player\water2.mp3
6468:Sound File Load Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\player\water2.mp3
6477:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\edadan.mp3
6486:Sound File Load Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\edadan.mp3
6494:File Open Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\boss_timeout2.wav
6505:Sound File Load Error : C:\Users\nicoyou\source\repos\th_act_remake\th_act_remake\data\se\boss_timeout2.wav
|
Re: Dxアーカイブからフォントを読み込みたい ( No.21 ) |
- 名前:管理人 日時:2019/09/22 02:45
|
Re: Dxアーカイブからフォントを読み込みたい ( No.22 ) |
- 名前:にこよう (解決) 日時:2019/09/23 14:45
全てのエラーログが正常に出力されていることを確認しました
スレッドの内容が後半はそれてしまいましたが、それでも迅速な修正ありがとうございましたm(__)m
|