お世話になっております。今回ゲーム起動時に透過ウインドウにロゴを表示してからゲームを起動しようと思ったのですがDDS画像を使うと正常に表示されません。
また最初ロゴのサイズの解像度で透過ウインドウを起動したあと、ゲーム本来の解像度に変更する時に、一瞬変な風に描画されてしまいます。
黒い画面が表示されないようにSetWindowVisibleFlagを試したのですが効果が無くDxLib_Init()の前でしか効果は無いのでしょうか?どうすればスムーズに透過ウインドウと通常ウィンドウを切り替えられるでしょうか?
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int GrHandle, GrHandle2;
int Screen;
int SoftImage;
int AlphaAdd;
int Alpha;
int Time=0;
// ウインドウモードで起動
ChangeWindowMode(TRUE);
//解像度変更時に画像をリセットしない
SetChangeScreenModeGraphicsSystemResetFlag(FALSE);
// 透過ウインドウ設定
SetUseBackBufferTransColorFlag(TRUE);
SetGraphMode(1024, 192, 32);//ロゴサイズの解像度
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
SetWindowSizeExtendRate(1.0);//DPI解像度を通常に
GrHandle2 = LoadGraph("screen.png"); //1280×960の画像
// 描画対象にできるアルファチャンネル付き画面を作成
Screen = MakeScreen(1024, 192, TRUE);//ロゴのサイズのスクリーン
// 画面取り込み用のソフトウエア用画像を作成
SoftImage = MakeARGB8ColorSoftImage(1024, 192);
// 画像を読み込む際にアルファ値をRGB値に乗算するように設定する
SetUsePremulAlphaConvertLoad(TRUE);
// 画像の読み込み
GrHandle = LoadGraph("logo.png"); //1024×192の画像
// 描画先を描画対象にできるアルファチャンネル付き画面にする
SetDrawScreen(Screen);
// メインループ
AlphaAdd = -8;
Alpha = 255;
while (ProcessMessage() == 0)
{
// 画面をクリア
ClearDrawScreen();
// アルファ値の変更
Alpha += AlphaAdd;
if (Alpha <= 0)
{
Alpha = 0;
AlphaAdd = 8;
}
else
if (Alpha >= 255)
{
Alpha = 255;
AlphaAdd = -8;
}
// 描画ブレンドモードを乗算済みアルファにセット
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, Alpha);
// 画像を描画
DrawGraph(0, 0, GrHandle, TRUE);
// 描画先の画像をソフトイメージに取得する
GetDrawScreenSoftImage(0, 0, 1024, 192, SoftImage);
// 取り込んだソフトイメージを使用して透過ウインドウの状態を更新する
UpdateLayerdWindowForPremultipliedAlphaSoftImage(SoftImage);
// 少し待つ
Sleep(16);
//カウントが120までロゴを表示
if (Time == 120) {
break;
}
Time++;
}
DeleteGraph(Screen);
DeleteSoftImage(SoftImage);
SetGraphMode(1280, 960, 32);
SetUseBackBufferTransColorFlag(FALSE);
SetDrawScreen(DX_SCREEN_BACK);
DeleteGraph(GrHandle);
while (ProcessMessage() == 0&&CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClearDrawScreen();
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255);
DrawGraph(0, 0, GrHandle2, TRUE);
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}