読み込み中の処理
Rinifisu  2014/05/22(Thu) 07:28
場面の切り替わりの際に「Now Loading」のような表示に加え、
アニメーションやサウンドの再生を行いたいのですが、
テクスチャやサウンドを読み込む際にフリーズしてしまいます。

別のスレッドにある僕の自作ゲームの「Laser Maze」の読み込み中に
画面やマウスポインタがフリーズしていることがわかると思います。
それを無くす方法がわかるとうれしいです。
だいたいこんな感じになっています。


Font(略);

/*ここにどのサウンドを読み込むか判断する処理*/

Sound(略);
Sound(略);
Sound(略);
Sound(略);

/*ここにどのテクスチャを読み込むか判断する処理*/

Texture(略);
Texture(略);
Texture(略);
Texture(略);
Texture(略);

/*ここに様々な変数処理*/

while(System::Update( ))
{
表示
}


僕のアセット管理が下手なせいなのか、
テクスチャを約60個読み込んでいる場面もあります。
Rinifisu  2014/05/22(Thu) 12:25
時間が経って思いつきました。
今は実行できる環境ではないので、自分用にメモしておきます。

for (int i = 0; i < 10; i++, System::Update())
{
/* Now Loading と 読み込んだアセット数を表示*/

switch(i)
{
case 0:
Font(略);
break;
case 1:
Sound(略);
break;
case 2:
Sound(略);
break;

(...)

case 9:
Texture(略);
break;
}
}
Reputeless  2014/05/22(Thu) 17:51
Asset を使わないなら

# include <Siv3D.hpp>

void Main()
{
const int loadSize = 5;

std::array<Texture, loadSize> textures;

const std::array<FilePath, loadSize> filePaths =
{
L"Example/Windmill.png",
L"Example/Windmill.png",
L"Example/Windmill.png",
L"Example/Windmill.png",
L"Example/Windmill.png"
};

int loadIndex = 0;

while (System::Update())
{
if (loadIndex < loadSize)
{
textures[loadIndex] = Texture(filePaths[loadIndex]);

++loadIndex;
}

// ロード状況を表示
Rect(0, 200, Window::Width() / loadSize * loadIndex, 40).draw();
}
}


Asset を使うなら

# include <Siv3D.hpp>

void Main()
{
const int loadSize = 5;

TextureAsset::Register(L"Windmill_1", L"Example/Windmill.png");
TextureAsset::Register(L"Windmill_2", L"Example/Windmill.png");
TextureAsset::Register(L"Windmill_3", L"Example/Windmill.png");
TextureAsset::Register(L"Windmill_4", L"Example/Windmill.png");
TextureAsset::Register(L"Windmill_5", L"Example/Windmill.png");

const std::array<AssetName, loadSize> assetNames =
{
L"Windmill_1",
L"Windmill_2",
L"Windmill_3",
L"Windmill_4",
L"Windmill_5"
};

int loadIndex = 0;

while (System::Update())
{
if (loadIndex < loadSize)
{
TextureAsset::Preload(assetNames[loadIndex]);

++loadIndex;
}

// ロード状況を表示
Rect(0, 200, Window::Width() / loadSize * loadIndex, 40).draw();
}
}

といった実装が考えられます。
将来のバージョンではバックグラウンドでのロードをサポートする予定です。
Rinifisu  2014/05/22(Thu) 22:25
ありがとうございます。
こちらのほうがアセットの新規追加がとても楽ですし、無駄なループも削減できますね。
参考にします。(半分コピペのような形になってしまいますが)


>>> 将来のバージョンではバックグラウンドでのロードをサポートする予定です。
よろしくお願いします。
Creaddy  2023/05/28(Sun) 05:15
 人気スーパーコピーブランド時計激安通販専門店私達は長年の実体商店の販売経験を持って、先進とプロの技術を持って、高品質のスーパーコピー時計づくりに 取り組んでいます。最高品質のロレックス時計コピー、カルティエ時計コピー、IWC時計コピー、ブライトリング時計コピー、パネライ時計コピー激安販売中商品の数量は多い、品質はよい。 }}}}}} 
https://www.b2kopi.com/product/detail.aspx?id=11427

- WEB PATIO -