別の場所にて、この掲示板で確認した方がよいとご指摘を受け、こちらの方で質問させていただきます。
DxLibのマスク処理を行った後にDrawRectGraphで描画を行った際に描画できません。DrawBoxなどほかの関数ではできるのですが。他の方もDrawRectGraphではできなかったとのことで、なにか制約などあるのでしょうか。DxLibのバージョンですが、Ver 3.13を使用しております。以下に自分の描いたコードを載せてみます。よろしくおねがいします。
#include "DxLib/DxLib.h"
#include <math.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow )
{
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
DxLib_Init();
int win_Wid, win_Hei, win_Cb;
GetScreenState( &win_Wid, &win_Hei, &win_Cb );
CreateMaskScreen();
int img_Wid = 32;
int img_Hei = 32;
int* GHandle = new int[224];
LoadDivGraph( _T("sozai/map1.png") , 224 , 8 , 28 , img_Wid , img_Hei , GHandle ) ;
int MaskHandle = MakeMask(win_Wid, win_Hei);
int draw_X = 0;
int draw_Y = 50;
unsigned char mLight[480][640];
//SetUseMaskScreenFlag( FALSE );
while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){
for(int x = 0; x<win_Wid; x++){
for(int y = 0; y<win_Hei; y++){
mLight[y][x] = 0xff;
}
}
double harfD = 2*32;
for(int i = (int)(win_Wid / 2 + draw_X - harfD); i<=win_Wid / 2 + draw_X + harfD; i++){
int r = (int)floor(sqrt(pow(harfD, 2) - pow((double)(win_Wid / 2 + draw_X - i), 2)));
for(int j = (int)(win_Hei / 2 + draw_Y - r) ; j<= win_Hei / 2 + draw_Y + r; j++){
if(i < win_Wid && i >= 0 && i < win_Hei && i >= 0){
mLight[j][i] = 0;
}
}
}
SetDataToMask( win_Wid, win_Hei, mLight, MaskHandle);
DrawMask( 0, 0, MaskHandle, DX_MASKTRANS_BLACK);
for(int map_Y = 0; map_Y * img_Hei < win_Hei; map_Y++){
for(int map_X = 0; map_X * img_Wid < win_Wid; map_X++){
//DrawBox(0, 0, win_Wid, win_Hei, GetColor(255, 0, 0), TRUE );
DrawRectGraph( map_X * img_Wid + draw_X, map_Y * img_Hei + draw_Y, 0, 0, 32, 32, GHandle[76], TRUE, FALSE ) ;
}
}
}
DxLib_End();
return 0;
}