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 低下を回避できるので、これで暫定対応としようと思います。
|