はじめまして、L-EO(レオ)といいます。
今回、文字色を黒、文字の縁(エッジ)を白として、黒い画面からフェードイン・フェードアウトさせようと思いプログラムしたところ、一部動作がおかしいところがあります。
SetDrawBlendMode関数にてアルファ値を調整し、だんだん透明にしてフェードイン・アウトを行おうとしていますが、透明度が128ごろになるとエッジだけでなく、文字自体まで半透明な白になってしまいます。
自分の理想としては、エッジのみをフェードさせたいのですが…。
これはバグなのでしょうか?それとも仕様でしょうか??
もし仕様であれば、エッジのみを縁取りした画像をフェードさせようとも考えていますが、できるだけ画像は使わずにやってみたいと思っています。
自分の書いたコードを一部載せておきます。
int x = 0;
int font = CreateFontToHandle("MS ゴシック", 16, 6, DX_FONTTYPE_EDGE);
int flag = 0;
ChangeFontType(DX_FONTTYPE_EDGE);
while((ScreenFlip() == 0) && (ProcessMessage() == 0) && (ClearDrawScreen() == 0)){
//ここに計算処理を書く
if (flag == 0){
x++;
if (x >= 255) flag = 1;
}
else if (flag == 1){
x--;
if (x <= 0) flag = 0;
}
//ここに描画処理を書く
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
DrawFormatString(0, 0, GetColor(255, 0, 0), "透明度=%d", x);
DrawString(0, 48, "TEST", GetColor(0, 0, 0), GetColor(255, 255, 255));
DrawStringToHandle(0, 64, "TEST", GetColor(0, 0, 0), font, GetColor(255, 255, 255));
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 128);
DrawString(0, 96, "TEST", GetColor(0, 0, 0), GetColor(255, 255, 255));
DrawStringToHandle(0, 112, "TEST", GetColor(0, 0, 0), font, GetColor(255, 255, 255));
SetDrawBlendMode(DX_BLENDMODE_ALPHA, x);
DrawString(0, 144, "TEST", GetColor(0, 0, 0), GetColor(255, 255, 255));
DrawStringToHandle(0, 160, "TEST", GetColor(0, 0, 0), font, GetColor(255, 255, 255));
}