ページ 1 / 1
ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 19:06
by トム
ゲーム起動時の画像の表示の仕方がわかりません
要するにロード画面みたいなもを表示したいんですがどうしたらいいですか?
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 19:36
by kazuoni
環境が分かりませんが、
DXライブラリの画像の表示の仕方は
http://homepage2.nifty.com/natupaji/DxL ... .html#R3N2
などを参考に。(本家HPです)
http://dixq.net/g/#33
上のは選択画面の作り方です。
選択されたら戻り値なり、フラグなりで次の処理へ。
もう少し具体的に質問したほうが
良い回答が得られるかも知れません。
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 20:17
by Dixq (管理人)
マルチスレッドで、描画する関数とロードする関数を平行させるという手もあります。
ただ、DXライブラリなどのライブラリはロードする関数が返って来るまで次の処理が行われないので、
ロードはカクカクしてしまうと思います。
(CPUが行っている処理ではないと、マルチスレッドの恩恵はあまり受けられないです)
もし、時間がかかってもスムーズなロード画面を表示したいのなら、
ロード関数を呼ぶたびにScleenFlipで裏画面反映させるという手もあります。
ただ、こうすると60FPSで表示しているなら、60個読み込み関数をよんだら、
最低でも1秒はロードに時間がかかります。
私は昔裏画面処理をせずに、メーターを描画する方法を取っていました。
「○○%」という表示の仕方は出来ませんが、描画した内容を消さずに、ドンドン上書きしていくのです。
最初メーターは空っぽで、上から読み込んだメーターの長さ分だけ上書きしていきました。
□□□□□
↓
■□□□□
↓
■■□□□
↓
■■■□□
こんな感じですね。
そうすると前書いた内容を消さなくてよく、描画しても垂直同期を待たなくて済みます。
つまり
ロード関数(); メーター描画関数();
ロード関数(); メーター描画関数();
ロード関数(); メーター描画関数();
こんな感じで書いていっていました。
ただし、音楽を読み込む関数やフォントを設定する関数など、どれも処理時間が違うので、
単純に100個ある関数のうち50個読み込んだから今50%では無い事に注意が必要です。
一度、どの関数にどれ位時間がかかるのか測定し、それにあったメーターを表示させると正しいメータが表示されるかと思います。
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 21:44
by トム
なるほど。ちょっと分かったような気がします
>もう少し具体的に質問したほうが
>良い回答が得られるかも知れません。
すいません。最初の読み込んでいる時間のあいだ何も表示されないと思いますがそのあいだに画像を表示させていたいんです(1枚のみ)
Dixq (管理人) さんの説明でちょっと分かったような気がしますがロードする関数というのがよく分からずそのロードする関数とロードする関数の間に処理のしかたがわかりません
わかりますでしょうか?
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 21:52
by yu
一枚絵の場合ですが、画像をロードする関数の前に
void disp_load(){//ロード中の画像
int img;
img=LoadGraph("xxx");//画像ファイルロード
DrawGraph(0,0,img,TRUE);//描画
ScreenFlip();//裏画面に反映
ClearDrawScreen();//裏画面を初期化
DeleteGraph(img);//画像ハンドル破棄
}
このような関数を読んでおけばロード中は画像が表示されるはずですよ。
画像を動かしたい、メーターを付けたいとかになると、管理者様の方法がよいかと思います。
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 22:27
by トム
ロードする関数というものがわからず出来ません
エラーの出ない一番上に書いたんですが出来ません
もしかしてですが#include "DxLib.h"の処理でロードが長くなっていると思うんですがその処理が終わるまでは画像を表示できないんですか?
もしそうだとしたらDxLib.hの使っていない所を消すとロードが早くなるんでしょうか?
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 22:46
by yu
起動時に時間がかかるのは、初期化を行っているためだと思います。
ロードとは、画像や音声などのデータをメモリに確保することです。多分・・・
DXライブラリの関数で言うと
LoadGraph()・LoadSoundMem() 等です。
一つの画像をロードするぐらいなら一瞬ですが、
音声や、画像が多いと時間がかかります。
最初の初期化時に画像を挿入させるのはすみませんが分かりません;
自分の書いた関数を使うとすると
disp_load();//ロード中の画面表示
LoadGraph();//画像ロード
・
・
・
LoadSoundMem();//音声ロード
・
・
・
のように書けばよいと思います。
・・・このよう一つ一つファイル名を書いてロードするのは大規模なプログラムになると困りますが・・・
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 22:56
by Dixq (管理人)
>ロードする関数というものがわからず出来ません
何がわかりませんか?
現在ロードはどのようにしているのでしょう?
私はロード処理を一つの関数にまとめたものをロード関数と名づけましたが・・。
もし出来そうにないなら、
最初に「NowLoading!」と表示させて、それを消さずにロード関数に処理渡して、
ロードが終わったら普通の画面表示にするんじゃだめですか?
やっぱパーセント表示とかメーターとかいるんでしょうか。
Re:ゲーム起動時の画像の表示
Posted: 2009年2月15日(日) 23:02
by トム
なるほど
きっと出来ていないんじゃなくて
ロードする関数が少なく初期化が長いため表示されていないと思ったようですね
解決しました
Re:ゲーム起動時の画像の表示
Posted: 2009年2月16日(月) 09:05
by toyo
初期化関数
DxLib_Init()
が時間がかかるのでその間に画像を表示したいということであれば無理だと思いますよ
Re:ゲーム起動時の画像の表示
Posted: 2009年2月16日(月) 09:52
by トム
そうなんですか
ありがとうございます
タイトルとは関係ないんで答えてくれなくても良いですが
DxLib_Init()
の処理を早くさせる方法
要するにロードを早くさせる方法はありますか?
Re:ゲーム起動時の画像の表示
Posted: 2009年2月16日(月) 12:55
by Dixq (管理人)
初期化にそんなに時間かかりますか?
本当に時間がそこにかかっているかどうか、時間を測定して表示してみてはどうでしょう?
時間をはかり、長時間かかる関数があるなら、改めてその関数に対策をたててみてはどうでしょう。
Re:ゲーム起動時の画像の表示
Posted: 2009年2月16日(月) 15:20
by トム
なるほど
ありがとうございます