具体的に
一度初期化したDXライブラリを同一アプリケーション内でもう一度初期化したいのですが
これがなかなかうまくいかないのです
さらに詳しく言うと
DXライブラリ初期化1回目
↓ウィンドウの大きさ、描画範囲などを設定
↓メインループ1……形のないウィンドウを作るため描画の反映方法はソフトウェアイメージの転送
DXライブラリ終了
DXライブラリ初期化2回目
↓ウィンドウの大きさ、描画範囲などを設定
↓メインループ2……こちらは640×480で固定の枠ありウィンドウ
↑ここで止まる、ProcessMessageがエラーを返したり、FPSが極端に遅くなる
原因のコードです
#define GLOBAL_INSTANCE
#include "GV.h"
#include "Display.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
//GetHitKeyStateAll_2();//現在のキー入力処理を行う
//GetHitPadStateAll(); //現在のパッド入力処理を行う
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
SetWindowTextA("AIS-#Alice");
int h,w;
DisplayMode m_display;
w=m_display.GetWidth();
h=m_display.GetHeight();
int screensofthandle, screensofthandle2, sfhandle ;
SetWindowStyleMode(2);
SetGraphMode(w,h,32);
SetWindowSize(w,h);
SetWindowInitPosition(0,0);
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// ウインドウの透過色モードON
SetUseBackBufferTransColorFlag( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
SetDrawMode(DX_DRAWMODE_BILINEAR);
// 画像の読み込み
sfhandle = LoadSoftImage( "AIS-StarupLogoDesign.png");
int iw,ih;
GetSoftImageSize(sfhandle,&iw,&ih);
// 透過色を設定
SetTransColor( 255, 0, 255 ) ;
// 画面出力用のソフトウエア画像の作成
screensofthandle = MakeARGB8ColorSoftImage( w, h ) ;
screensofthandle2 = MakeARGB8ColorSoftImage( w , h );
// 描画先を裏画面に
SetDrawScreen( DX_SCREEN_BACK ) ;
int wav01;
wav01=LoadSoundMem("AIS-StartUpSound.wav");
int opacity = 0;
int c001 = 0;
while( ProcessMessage() == 0 )
{
if(c001<=64)
{
if(opacity<=255)opacity+=4;
if(opacity>=255)opacity=255;
}
else
{
if(c001>=160)
{
if(opacity>=0)opacity-=8;
if(opacity<=0)opacity=0;
}
}
if(c001==0)
PlaySoundMem(wav01,DX_PLAYTYPE_BACK);
if(c001<192)
c001++;
else
goto NEXT001;
// 画面をクリア
ClearDrawScreen() ;
// 画面出力用のソフトウエア画像をクリア
FillSoftImage( screensofthandle, 0, 0, 0, 0 ) ;
FillSoftImage( screensofthandle2, 0, 0, 0, 0 ) ;
// 画面出力用のソフトウエア画像の左上端に読み込んだ画像を転送
BltSoftImage( 0, 0, iw, ih, sfhandle, (w-iw)/2, (h-ih)/2, screensofthandle ) ;
BltSoftImageWithAlphaBlend( 0, 0, w, h, screensofthandle, 0, 0, screensofthandle2,opacity);
// 画面出力用のソフトウエア画像を使ってウインドウの表示を更新
UpdateLayerdWindowForSoftImage( screensofthandle2 ) ;
}
NEXT001:
SetWindowTextA("AIS-#Alice");
SetWindowStyleMode(0);
SetGraphMode(640,480,32);
SetWindowSize(640,480);
SetDrawArea(0,0,640,480);
SetWindowPosition((w-640)/2,(h-480)/2);
SetUseBackBufferTransColorFlag(FALSE);
while(ProcessLoop()==0)
{
music_ini();
switch(func_state){
case 0://システム制御を始める前に行う初期化0
ini();
dictionary_loader(0);
break;
case 1:
InterFace_main();
win_draw_main();
break;
case 2:
break;
case 99://
break;
case 100://通常処理
break;
default:
printfDx("不明なfunc_state\n");
break;
}
music_play();
ScreenFlip();//裏画面反映
count++;
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
これはどうにかならないでしょうか?
あまり公にしたくない部分なども含んでいるので
コード一式が必要の場合はすみませんがレスを下さい
メールをお送りいたします