トップページ > 記事閲覧
指定した箇所以外を塗りつぶす処理について
名前:Nさん 日時: 2019/04/25 16:10

いつも使わせていただいています。現在ダンジョンを探索するようなゲームを作成しています。 質問なのですがGBAのポ○モンの洞窟等で自分の周囲以外を暗くする処理を作成したくてリファレンスを読んでいて、 図形描画処理で円や四角を描画できるのは把握しているのですが、塗りつぶした四角形から円形にくり抜いた図形を表示する方法はあるのでしょうか? 出来ればくり抜いた部分は描画無しでお願いします
メンテ

Page: 1 |

Re: 指定した箇所以外を塗りつぶす処理について ( No.1 )
名前:管理人 日時:2019/05/01 02:08

先にご返信されていた MORさんのお書き込みが消えてしまったので遅ればせながらご返信します MakeScreen による『描画先にできるグラフィックハンドルを作成する機能』と、GraphBlendBlt による 『RGBA の色を入れ替える機能』を使用すれば実現できます こちらに『中心に穴の開いた黒い画像の向こう側に左右に動く縦の棒がある』プログラムを 組んでみましたので、よろしければご覧ください #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int Screen ; int HoleGraph ; int x ; int xadd ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 穴が開いた画像を描画するための仮画面を作成 Screen = MakeScreen( 640, 480, TRUE ) ; // 穴が開いた画像の穴の部分を透過する画像作成用の仮画面を作成 HoleGraph = MakeScreen( 640, 480, TRUE ) ; // 描画先を穴が開いた画像を描画するための仮画面に変更 SetDrawScreen( Screen ) ; // 画像全体を赤色で塗りつぶす DrawBox( 0, 0, 640, 480, GetColor( 255,0,0 ), TRUE ) ; // 画面中心に黒色のアンチエイリアス付きの円を描画する DrawCircleAA( 320.0f, 240.0f, 200.0f, 64, GetColor( 0,0,0 ), TRUE ) ; // 画像合成関数を使用して、赤色の部分だけを透過しない黒い画像を作成する GraphBlendBlt( Screen, Screen, HoleGraph, 255, DX_GRAPH_BLEND_RGBA_SELECT_MIX, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_R ) ; // 画面上を左右に動く棒の処理用の変数を初期化 x = 0 ; xadd = 8 ; // 背景色を灰色にする SetBackgroundColor( 128,128,128 ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 画面を左右に動く棒の処理 x += xadd ; if( x < 0 || x > 640 ) { xadd = -xadd ; } // 棒を描画 DrawBox( x, 0, x + 64, 480, GetColor( 255,255,255 ), TRUE ) ; // 真ん中が穴の開いた黒い画像を描画 DrawGraph( 0, 0, HoleGraph, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } まず MakeScreen で作成した『描画先にできる画像( Screen )』の全体を赤で塗りつぶした後、中心に黒い円を描画します 次に別の『描画先にできる画像( HoleGraph )』に GraphBlend の DX_GRAPH_BLEND_RGBA_SELECT_MIX を使用して Screen の色成分の以下のように入れ替えています Screen の緑成分 → HoleGraph の赤成分 Screen の緑成分 → HoleGraph の緑成分 Screen の緑成分 → HoleGraph の青成分 Screen の赤成分 → HoleGraph の透過成分 Screen は『中心に穴の開いた赤い画像』で緑成分は 0 なので『Screen の緑成分』を転送された『HoleGraph の赤・緑・青成分』は 真っ黒になります、これで HoleGraph が黒い画像になります、そして HoleGraph の透過成分( アルファチャンネル )として 『Screen の赤成分』が転送されるので、HoleGraph は『中心に透過の穴の開いた黒い画像』となるわけです こうして出来上がった HoleGraph は DrawGraph で透過処理ON( 第三引数 TRUE )で描画するだけで中心に穴の開いた黒い画像となります よろしければお試しください m(_ _)m
メンテ
Re: 指定した箇所以外を塗りつぶす処理について ( No.2 )
名前:Nさん 日時:2019/05/04 14:00

返事が遅れて申し訳ございません、 ありがとうございます、試してみます
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存