現在、DxLibを利用してノベルゲームのエンジンを作成しています。
そこで背景画像の描画について気になったことが有ります。
それはLoadGraphScreen関数とDrawGraph関数の違いです。
それぞれを使用するメリットはhttp://homepage2.nifty.com/natupaji/DxL ... .html#R3N7から、
・LoadGraphScreen関数は呼び出された時に画像を読み込むため、メモリを圧迫しない
・DrawGraph関数は事前にメモリに画像を読み込むため、処理が早い
と考えました。
メッセージの表示に併せて逐次画面クリアが行われるため、メモリに画像を読み込んで保持しておきたい反面、画像の枚数からメモリを大量に使ってしまい重いプログラムになることも避けたいです。
そこでこれらの関数を上手く使い分けて効率の良いプログラムを組みたいと思います。
どのように組み合わせるのが良いか、助言をお願いします。
【C/C++】画像描画について【DxLib】
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 【C/C++】画像描画について【DxLib】
LoadGraphScreenはScreenの名が示していますが特殊な関数て静止画のロゴ表示ぐらいにしか使えません。
読み込んだフレームしか表示できないので一般的なDXライブラリの使い方から外れるためです。
それと読み込み時間は1フレームを超えることがありえますので、フレーム落ち=反応の悪さになります。
LoadGraphScreenは基本的に選択肢に入れないと思って下さい。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/01_03.html
読み込んだフレームしか表示できないので一般的なDXライブラリの使い方から外れるためです。
それと読み込み時間は1フレームを超えることがありえますので、フレーム落ち=反応の悪さになります。
LoadGraphScreenは基本的に選択肢に入れないと思って下さい。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/01_03.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 【C/C++】画像描画について【DxLib】
返信ありがとうございます。softya(ソフト屋) さんが書きました:LoadGraphScreenはScreenの名が示していますが特殊な関数て静止画のロゴ表示ぐらいにしか使えません。
読み込んだフレームしか表示できないので一般的なDXライブラリの使い方から外れるためです。
それと読み込み時間は1フレームを超えることがありえますので、フレーム落ち=反応の悪さになります。
LoadGraphScreenは基本的に選択肢に入れないと思って下さい。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/01_03.html
複数を同時に読み込まず、かつメモリにデータを保持する方法として
画像ハンドルの変数を背景用に1つ用意し、必要に応じてその変数に代入する画像を切り替えDrawGraph関数に渡すという方法を考えました。
これでメモリを無駄にせず処理速度も落とさない、中庸的な方法を取れると思うのですがいかがでしょうか?
-
ThrouhTheMorning
Re: 【C/C++】画像描画について【DxLib】
その方法ですと、画像を切り替える度にLoadGraph関数を呼び出す(画像データをファイルから読み込む)ので、LoadGraphScreen関数でやるのと大差ないと考えられます。
そもそもLoadGraph関数で読み込んだ画像データは、DeleteGraph関数で削除しない限り(または、Dxライブラリが終了しない限り)メモリに残っているので、LoadGraph関数を呼び出した回数分どんどんメモリに蓄積されます。
画面イッパイの領域を使う画像データは、比較的重そうなBMP形式であっても思っているほどメモリを消費していません。Windowsならタスクマネージャで簡単に確認できると思いますので、気になる場合はご覧になって下さい。
そもそもLoadGraph関数で読み込んだ画像データは、DeleteGraph関数で削除しない限り(または、Dxライブラリが終了しない限り)メモリに残っているので、LoadGraph関数を呼び出した回数分どんどんメモリに蓄積されます。
画面イッパイの領域を使う画像データは、比較的重そうなBMP形式であっても思っているほどメモリを消費していません。Windowsならタスクマネージャで簡単に確認できると思いますので、気になる場合はご覧になって下さい。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 【C/C++】画像描画について【DxLib】
結局のところ心配するような事態が起こるのか?と言うのが検討すべきところだと思います。
◯◯かも知れないで、手間のかかる処理を行ってもバグと手間が増えるだけかもしれません。
つまり無駄な作業を自分で発生させているだけなのかもしれません。
と言うことで、LoadGraph()して不要ならDeleteGraph()する処理をするとして、それで支障があるかテストコードでテストしてみるべきかと思います。
ここで質問して回答を待つより結果が出るのが早いですし、ソースコードを上げれば回答者から良いアドバイスをもらえる可能性が高くなります。
やる前に考えすぎると停滞時間が長くなるので悩む前にやる。やってから悩むってことでどうでしょうか。
初心者は失敗して学ぶものなんで、どんどん失敗して欲しいんですけどね。その中から学び取るものも多いです。
上の方に無駄かもしれませんと書きましたが経験という意味ではありです。
◯◯かも知れないで、手間のかかる処理を行ってもバグと手間が増えるだけかもしれません。
つまり無駄な作業を自分で発生させているだけなのかもしれません。
と言うことで、LoadGraph()して不要ならDeleteGraph()する処理をするとして、それで支障があるかテストコードでテストしてみるべきかと思います。
ここで質問して回答を待つより結果が出るのが早いですし、ソースコードを上げれば回答者から良いアドバイスをもらえる可能性が高くなります。
やる前に考えすぎると停滞時間が長くなるので悩む前にやる。やってから悩むってことでどうでしょうか。
初心者は失敗して学ぶものなんで、どんどん失敗して欲しいんですけどね。その中から学び取るものも多いです。
上の方に無駄かもしれませんと書きましたが経験という意味ではありです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 【C/C++】画像描画について【DxLib】
自分の中で、同じハンドルに画像のデータを上書きすればメモリ上でも上書きされると思っていたため、ThrouTheMorning様の返信は非常に勉強になりました。
softya様の方法で試してみたところ、問題なく動いたため解決とさせていただきます。
次回以降はコードも載せるようにします。
返信有難うございました。
softya様の方法で試してみたところ、問題なく動いたため解決とさせていただきます。
次回以降はコードも載せるようにします。
返信有難うございました。