DrawBoxAA などのアンチエイリアス付き図形描画のアンチエイリアスが掛かっている部分は
描画先のピクセルの色と図形のピクセルの色がアルファブレンドされているのですが、
アルファブレンドは単純な足し算ではないのでアルファブレンドの描画どうしが重なると
重なった部分が見えてしまいます
なので、単純な足し算である加算ブレンドを使えば綺麗に繋がります
// 加算ブレンドに変更
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
// Boxを描画
DrawBoxAA(0, 0, 100+x, 10, GetColor(0, 128, 0), true);
DrawBoxAA(101-(1-x), 0, 200, 10, GetColor(0, 128, 0), true);
// 元に戻す
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 );
Boxを加算ブレンドで描画すると不都合がある場合は、MakeScreen でBox画像作成用の
仮画面を作成して、そこにBoxを加算ブレンドで描画した後、仮画面を裏画面に描画すると
裏画面には加算ブレンドではないBoxを描画できます
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
int TempScreen;
ChangeWindowMode(true);
SetGraphMode(320, 240, 32);
//SetWindowSizeExtendRate(2.0);
WaitVSync(true);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
// Box描画用の仮画面を作成
TempScreen = MakeScreen( 200, 10, FALSE );
float x = 0;
while (!ProcessMessage())
{
ClearDrawScreen();
// Boxが加算ブレンドになってしまっていないかを確認するために背景を灰色で塗りつぶし
DrawBox( 0,0,320,240, GetColor( 128,128,128 ), TRUE );
if (CheckHitKey(KEY_INPUT_A))x -= 0.01f;
if (CheckHitKey(KEY_INPUT_D))x += 0.01f;
DrawFormatString(0, 40, GetColor(255, 255, 255), "x:%.2f", x);
DrawFormatString(0, 55, GetColor(255, 255, 255), "100+x:%.2f", 100 + x);
DrawFormatString(0, 70, GetColor(255, 255, 255), "101-(1-x):%.2f", 101 - (1 - x));
DrawPixel(100-1, 5, GetColor(255, 0, 0));
// 描画先を仮画面に変更
SetDrawScreen( TempScreen );
// 仮画面をクリア
ClearDrawScreen();
// 加算ブレンドで二つのアンチエイリアス付きBoxを描画
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
DrawBoxAA(0, 0, 100+x, 10, GetColor(0, 128, 0), true);
DrawBoxAA(101-(1-x), 0, 200, 10, GetColor(0, 128, 0), true);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 );
// 裏画面にBoxを描画した仮画面を描画
SetDrawScreen( DX_SCREEN_BACK );
DrawGraph( 0, 0, TempScreen, TRUE );
ScreenFlip();
}
DxLib_End();
return 0;
}
よろしければお試しください m(_ _)m