ページ 11

ローディングで伸びてゆくバー

Posted: 2012年3月06日(火) 12:07
by 小太郎
今ロードバー(?)を作っています。
関数ポインタを使って、一つ画像が読み込まれたらバーをちょっと伸ばすといったことを繰り返し、もしNULLだったらbreakでロードループを抜けるといった形にしたいのですが、肝心の関数ポインタを良く理解できずに困っています。
質問なのですが、下の様にするとエラーが出てしまう。じゃあどうすれば下の様な形にできるのでしょうか?
なんか質問の内容がめちゃくちゃですみません、わかりにくかったらもう一度説明いたしまう

コード:

#include "DxLib.h"

int (*Loading[])()=
{
	LoadGraph("画像/test1.png"),
	LoadGraph("画像/test2.png"),
	LoadGraph("画像/test3.png"),
	NULL,
};

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
		ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);

		int Handle[3],i=0;

		while(!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()){

				if(Loading[i]() != NULL)	Handle[i]=Loading[i]();
				else						break;

				i++;
				printfDx("OK!\n");
		}

		printfDx("All completed!!\n");
		ScreenFlip();
		WaitKey();

		DxLib_End();
		return 0;
}

Re: ローディングで伸びてゆくバー

Posted: 2012年3月06日(火) 13:20
by softya(ソフト屋)
少なくとも関数ポインタにはなっていないです。
これだったらファイル名を配列にしてLoadGraph()のファイル名を配列で与える方式にすべきでしょう。
関数ポインタの出番ではありません。

あとDXライブラリで最近非同期読み込みが公式サポートされたので、それを使うとスムーズなnow loadingが実現します。

SetUseASyncLoadFlag  非同期読み込みを行うかどうかを設定する
GetASyncLoadNum  行っている非同期読み込みの数を取得する
CheckHandleASyncLoad  ハンドルが非同期読み込み中かどうかを取得する

「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... html#R21N1

Re: ローディングで伸びてゆくバー

Posted: 2012年3月06日(火) 13:58
by 小太郎
そうですね、確かに名前を配列に格納して与えるべきでした
ポインタ関数を一度でも使ってみたいと思いすぎて無駄なところにむりくりねじ込んでしまったみたいですorz

教えてもらった三つの関数をテストしてみたところすごく使える、自分の求めていた関数そのものだったようで、こちらを使っていこうと決めました。そっちのほうがバーだけじゃない、もっといいロード画面ができそうですし。

ソフト屋様ありがとうございました