Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.1 ) |
- 名前:管理人 日時:2023/02/16 01:59
すみません、2つ目の画像は『d』の文字の座標が上に移動してしまっているということが分かるのですが
1つ目の画像はどの部分が不具合の箇所なのでしょうか?
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.2 ) |
- 名前:barrier 日時:2023/02/16 03:35
一つ目の画像は本来縁取りがあるはずのフォントを描画するはずだったのですが、なぜかフォントの縁取りが消えているんです、
二枚目の画像と同じように縁取りがあるはず...ですが他から見ただけではその証拠はどこにあるんだってなるのは仕方ないと思いました。
何回もソフトを起動したりしてこれはバグであろうと一目見てわかる画像を、
3枚持ってきましたのでお時間があるときに再度ご確認お願いします。
(https)://ux.getuploader.com/barrier_is_others/download/8
あとこちらの現象はすべて同一のソースコードでコンパイルして確認しております(言うのが遅い)。
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.3 ) |
- 名前:管理人 日時:2023/02/16 05:22
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.4 ) |
- 名前:barrier 日時:2023/02/16 20:50
暫定最新版ありがとうございます。
早速試してみましたが直ってはなかったです。
ただ、出現頻度みたいなのがあるらしくて(?)
紫色の半透明な四角...遭遇率は低いが結構確認する
文字列の一部がずれる...数十回起動して一回しか確認できず
文字の縁取りが消える...今のところ未確認
といった感じです。
バグの元を探すヒントになれば嬉しいです。
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.5 ) |
- 名前:管理人 日時:2023/02/17 08:34
お試しいただきありがとうございます
暫定最新版でもだめでしたか…
2つほどご質問させてください
1.諸々の表示は一度表示されると消えるまではずっとそのままなのでしょうか?
それとも一瞬だけ表示されるものなのでしょうか?
2.こちらの現象が発生しているプログラムではマルチスレッドは使用されていますでしょうか?
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.6 ) |
- 名前:barrier 日時:2023/02/18 00:26
>1.諸々の表示は一度表示されると消えるまではずっとそのままなのでしょうか?
> それとも一瞬だけ表示されるものなのでしょうか?
何回も呼び出しても現象を確認できれば文字列の内容を変えようがそのままです
>2.こちらの現象が発生しているプログラムではマルチスレッドは使用されていますでしょうか?
threadで描画と内部処理を分けてます
今音ゲーを作っているんですが音ゲーでは精度の高い入力を求められるのでマルチスレッドで作っています
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.7 ) |
- 名前:管理人 日時:2023/02/18 02:13
ご返答ありがとうございます
断定はできませんが、本件の不具合は恐らく thread でマルチスレッドで処理を行っていることが原因だと思います
DXライブラリはスレッドセーフのライブラリではないので、複数のスレッドからDXライブラリの関数が呼ばれると
正常に動作することが保証できなくなります
もし thread で複数のスレッドを使用される場合は
『DXライブラリの関数を呼ぶスレッドは、どれか特定の一つだけ』
にするようにしてください
恐らくそうすることで本件の現象も発生しなくなると思います m(_ _)m
もしどうしても複数のスレッドからDXライブラリの関数を呼ぶ場合は
『画面表示に関わる関数は必ず DxLib_Init() を呼んだスレッドで呼ぶ』
『入力に関係する関数のみ別スレッドで呼ぶ』
など、スレッド毎に呼ぶ関数のジャンルを限定することで正常に動作する可能性を高くすることができます
( ただ、基本的には複数のスレッドからDXライブラリの関数を呼んだ場合の動作の保証はできませんのでご了承ください )
|
Re: 文字列の描画がおかしい(DrawStringやDrawStringToHandleなど) ( No.8 ) |
- 名前:barrier(解決) 日時:2023/02/19 00:07
なるほど、複数のスレッドからDxLibの関数を使おうとすると正常な動作は期待できないんですね...
すこしだけソースコード変えたのがよかったのかはわかりませんが本件の現象も今のところ確認できてないので
これにて解決とさせていただきます
|