トップページ > 記事閲覧
SetFontSizeを設定した後に動作が遅くなることがある
名前:タニシン 日時: 2023/11/21 22:30

いつもお世話になっております。 SetFontSize を使用した後に GetFPS で確認してみると60だったFPSが17くらいまで下がっていることがあります。 使用していた SetFontSize をコメントアウトした場合、FPSは正常になります。 DxLibのバージョンは以前 DeleteSoundMem 関連を非同期対応していただいたものを使用しておりますが、 SetFontSize を使用している箇所では非同期処理をオフにしています。 現在は以下のようなイメージで使用しています。 関数Aから関数Bを呼び出し、関数Bの開始と終了で SetFontSize を呼び出し関数Aに戻る 補足 ・DxLib_Initを呼び出す前での SetFontSize による変更はしていない ・SetFontSize の関数Bでの引数は開始(25)終了(16)で別の値を使用 ・関数Bの SetFontSize に開始終了で同一の値を渡した場合は正常動作(2回目以降に別の値を与えると発生する?) ・再度関数Bに入ると何故かそのループ内は正常 ご確認いただきたいので、お手数ですがよろしくお願いします。
メンテ

Page: 1 |

Re: SetFontSizeを設定した後に動作が遅くなることがある ( No.1 )
名前:管理人 日時:2023/11/22 01:04

SetFontSize は非常に重い関数なので、SetFontSize を呼ぶと FPS が下がるというのは正常な動作となります 頻繁にフォントのサイズを変更する必要がある場合は CreateFontToHandle で予め必要なサイズのフォントのハンドルを作成して DrawStringToHandle や DrawFormatStringToHandle で文字列を描画するようにしてください m(_ _)m <CreateFontToHandle> https://dxlib.xsrv.jp/function/dxfunc_graph2.html#R17N10
メンテ
Re: SetFontSizeを設定した後に動作が遅くなることがある ( No.2 )
名前:タニシン 日時:2023/11/22 10:16

> SetFontSize は非常に重い関数なので、SetFontSize を呼ぶと FPS が下がるというのは正常な動作となります 申し訳ありません。 こちら側の質問の仕方が悪く、伝わっていない気がしますので一つ確認させてください。 SetFontSize をプログラム全体で2〜3回呼び出したくらいから急激に FPS が下がるのですが、 そもそも SetFontSize の使用をやめて、全てフォントハンドルで描画したほうが良いのでしょうか。 1つのゲームの中にメインゲームとミニゲームを入れており、 メインゲームとミニゲームのシーン切り替え時に全体サイズを変更するために SetFontSize を使用しています。
メンテ
Re: SetFontSizeを設定した後に動作が遅くなることがある ( No.3 )
名前:管理人 日時:2023/11/22 21:24

> SetFontSize をプログラム全体で2〜3回呼び出したくらいから急激に FPS が下がるのですが、 > そもそも SetFontSize の使用をやめて、全てフォントハンドルで描画したほうが良いのでしょうか。 こちらのご質問にお答えするにあたって、すみません、一つ質問させてください 『関数B』は一度入ると数分間処理が戻ってこないような関数なのでしょうか? ( ミニゲームが『関数B』の中で行われ、ミニゲームが終わるまで『関数B』から出てこない、といった形でしょうか? )
メンテ
Re: SetFontSizeを設定した後に動作が遅くなることがある ( No.4 )
名前:タニシン 日時:2023/11/23 12:59

> 『関数B』は一度入ると数分間処理が戻ってこないような関数なのでしょうか? > ( ミニゲームが『関数B』の中で行われ、ミニゲームが終わるまで『関数B』から出てこない、といった形でしょうか? ) 一行目は「はい」とも「いいえ」とも言えます。 『関数B』はミニゲームが呼ばれ、プレイヤーの操作により関数B内でミニゲームをしたり または、前の画面に戻る(=『関数A』に戻る)ことが可能です。 そのため、数分戻らないこともあれば数秒で戻ることも可能です。 なお、数秒で『関数A』に戻った後の動作は重くなりましたが、 数分プレイした後に『関数A』に戻った後は重くなったりならなかったりです。 二行目は「はい」です。 SetFontSize はクラスで言うコンストラクタやデストラクタ的な振る舞いで呼んでいます。 簡単なイメージを下に記載しますのでこちらで伝わるかなと思います。 // ミニゲーム void 関数B(){ SetFontSize(25); // ループ処理(特定の操作をすると抜ける) SetFontSize(16); } // メインゲーム void 関数A(){ // ループ処理(この中でミニゲームの項目を選択すると関数Bに飛ぶ) → 関数Bから戻ってくると動作が重くなる } // 初期化等は省略 int main(){ //関数Aを呼び出す }
メンテ
Re: SetFontSizeを設定した後に動作が遅くなることがある ( No.5 )
名前:管理人 日時:2023/11/23 22:52

ご返答ありがとうございます そのような使い方でしたら本来であれば FPS は下がったりしない筈です プログラム全体を拝見してみないとわかりませんが、原因として可能性が高いのは 『裏画面を使用していない』があります SetDrawScreen( DX_SCREEN_BACK ); ↑を実行して裏画面を描画先にしない状態で ScreenFlip(); を使用すると FPS が異様に下がったりすることがあります
メンテ
Re: SetFontSizeを設定した後に動作が遅くなることがある ( No.6 )
名前:タニシン(解決) 日時:2023/11/26 14:36

SetDrawScreen(DX_SCREEN_BACK); は DxLib_Init のすぐ後に一度使ったきりでした。 根本解決はまだしていませんが、一旦は 「FontHandle を作成して SetFontSize をコメントアウト」 で FPS 低下を回避できるので、これで暫定対応としようと思います。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存