#1
by 猫の湯吞み » 1年前
質問文:
現在、
https://dixq.net/g/sp_06.html さんのコードで非同期読み込みでファイルを読み込んだ際、ロード画面を表示できるようにする方法が判らなく立ち止まっています。
どのように取り組んだか:
main.cppを以下のように変更し
コード:
#include "DxLib.h"
#include "SceneMgr.h"
int LoadCircle;
void LoadScreen() {
static double count;
DrawRotaGraph2F(2360,900, 750, 750, 1.0, count, LoadCircle, TRUE);
count += 0.1;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
LoadCircle = LoadGraph("./Data/img/Load/LoadCircle.png");
SetUseASyncLoadFlag(TRUE);
SceneMgr sceneMgr;
sceneMgr.Initialize();
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){//画面更新 & メッセージ処理 & 画面消去
if (GetASyncLoadNum() == 0) {
sceneMgr.Update(); //更新
sceneMgr.Draw(); //描画
}else{
LoadScreen();
}
}
sceneMgr.Finalize();
DxLib_End(); // DXライブラリ終了処理
return 0;
}
Menu.cppでMV1LoadModelを使用し容量の大きいファイルを読み込むと
コード:
#include "Menu.h"
#include "DxLib.h"
static int model;
Menu::Menu(ISceneChanger* changer) : BaseScene(changer) {
}
//初期化
void Menu::Initialize(){
mImageHandle = LoadGraph("images/Scene_Menu.png"); //画像のロード
model = MV1LoadModel("model.pmx");
}
//更新
void Menu::Update(){
if(CheckHitKey(KEY_INPUT_G)!=0){//Gキーが押されていたら
mSceneChanger->ChangeScene(eScene_Game);//シーンをゲーム画面に変更
}
if(CheckHitKey(KEY_INPUT_C)!=0){//Cキーが押されていたら
mSceneChanger->ChangeScene(eScene_Config);//シーンを設定画面に変更
}
}
//描画
void Menu::Draw(){
BaseScene::Draw();//親クラスの描画メソッドを呼ぶ
DrawString(0, 0,"メニュー画面です。",GetColor(255,255,255));
DrawString(0,20,"Gキーを押すとゲーム画面に進みます。",GetColor(255,255,255));
DrawString(0,40,"Cキーを押すと 設定画面に進みます。",GetColor(255,255,255));
}
画面上に一瞬LoadCircleが表示されますが直ぐに消えてしまします。
環境
OS :Windows 11 Pro 22H2
開発環境 : Microsoft Visual Studio community 2022 Version 17.3.6
使用しているライブラリ DXライブラリ 3.24
[b]質問文:[/b]
現在、https://dixq.net/g/sp_06.html さんのコードで非同期読み込みでファイルを読み込んだ際、ロード画面を表示できるようにする方法が判らなく立ち止まっています。
[b]どのように取り組んだか:[/b]
main.cppを以下のように変更し
[code]
#include "DxLib.h"
#include "SceneMgr.h"
int LoadCircle;
void LoadScreen() {
static double count;
DrawRotaGraph2F(2360,900, 750, 750, 1.0, count, LoadCircle, TRUE);
count += 0.1;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
LoadCircle = LoadGraph("./Data/img/Load/LoadCircle.png");
SetUseASyncLoadFlag(TRUE);
SceneMgr sceneMgr;
sceneMgr.Initialize();
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){//画面更新 & メッセージ処理 & 画面消去
if (GetASyncLoadNum() == 0) {
sceneMgr.Update(); //更新
sceneMgr.Draw(); //描画
}else{
LoadScreen();
}
}
sceneMgr.Finalize();
DxLib_End(); // DXライブラリ終了処理
return 0;
}
[/code]
Menu.cppでMV1LoadModelを使用し容量の大きいファイルを読み込むと
[code]
#include "Menu.h"
#include "DxLib.h"
static int model;
Menu::Menu(ISceneChanger* changer) : BaseScene(changer) {
}
//初期化
void Menu::Initialize(){
mImageHandle = LoadGraph("images/Scene_Menu.png"); //画像のロード
model = MV1LoadModel("model.pmx");
}
//更新
void Menu::Update(){
if(CheckHitKey(KEY_INPUT_G)!=0){//Gキーが押されていたら
mSceneChanger->ChangeScene(eScene_Game);//シーンをゲーム画面に変更
}
if(CheckHitKey(KEY_INPUT_C)!=0){//Cキーが押されていたら
mSceneChanger->ChangeScene(eScene_Config);//シーンを設定画面に変更
}
}
//描画
void Menu::Draw(){
BaseScene::Draw();//親クラスの描画メソッドを呼ぶ
DrawString(0, 0,"メニュー画面です。",GetColor(255,255,255));
DrawString(0,20,"Gキーを押すとゲーム画面に進みます。",GetColor(255,255,255));
DrawString(0,40,"Cキーを押すと 設定画面に進みます。",GetColor(255,255,255));
}
[/code]
画面上に一瞬LoadCircleが表示されますが直ぐに消えてしまします。
環境
OS :Windows 11 Pro 22H2
開発環境 : Microsoft Visual Studio community 2022 Version 17.3.6
使用しているライブラリ DXライブラリ 3.24