スライドショーを作りたく、dxライブラリを使用し、2つの画像の透明度を片方は徐々に上げ、
もう一方を徐々に下げる、といったコードを自分なりに書いたところ、
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE);
SetWindowStyleMode(3);
SetWindowSizeChangeEnableFlag(TRUE);
SetAlwaysRunFlag(TRUE);
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
SetDrawScreen(DX_SCREEN_BACK);
int t = GetNowCount();
int i = 0,j,k=0;
int h[100];
char name[6] = "0.jpg";
while (LoadGraph(name) !=-1){
h[i] = LoadGraph(name);
sprintf(name, "%d.jpg", i + 1);
i++;
}
j = i;
i = 0;
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
if ((GetNowCount() - t) / 500 < 9){
DrawExtendGraph(0, 0, 640 - 1, 480 -1, h[i], TRUE);
DrawFormatString(0, 0, GetColor(255, 2, 255), "%d %d", i, (GetNowCount() - t));
ScreenFlip();
}
else{
if (i >= j - 1){
i = 0;
for (k = 0; k < 256; k = k + 3){
SetDrawBlendMode(DX_BLENDMODE_ALPHA, k);
DrawExtendGraph(0, 0, 640 - 1, 480 - 1, h[0], TRUE);
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255 - k);
DrawExtendGraph(0, 0, 640 - 1, 480 - 1, h[j-1], TRUE);
DrawFormatString(0, 0, GetColor(255, 2, 255), "%d",k);
ScreenFlip();
}k = 0;
}
else
{
i++;
for (k = 0; k < 256; k = k + 3){
SetDrawBlendMode(DX_BLENDMODE_ALPHA, k);
DrawExtendGraph(0, 0, 640 - 1, 480 - 1, h[i], TRUE);
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 255 - k);
DrawExtendGraph(0, 0, 640 - 1, 480 - 1, h[i - 1], TRUE);
DrawFormatString(0, 0, GetColor(255, 2, 255), "%d", k);
ScreenFlip();
}
k = 0;
}
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
DrawBox(0, 0, 640, 480, GetColor(0, 0, 0),TRUE);
t = GetNowCount();
}
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
均一な透明度にならなかったところがありました。
解決策があったら教えて下さい。