トップページ > 過去ログ > 記事閲覧
迷路ゲームに影をつけたい
名前:めーろ 日時: 2010/03/09 23:23

はじめまして。お世話になってます。 現在2Dで迷路ゲームを作成しているのですが、自分のキャラがいる周囲だけ円形に見えるようにし範囲より外は真っ暗にして地形が見えないようにしたいのですが方法が思いつかないのでこちらで質問させていただきました。 よい方法があったら御教授お願いいたします。

Page: 1 |

Re: 迷路ゲームに影をつけたい ( No.1 )
名前:Masao 日時:2010/03/10 05:45

私ならマスクを使うか、その形にあうグラフィックを作ります。 マスクについては、公式リファレンスのマスク関連の関数の説明文を参照のこと。 グラフィックについてはそのままです。 中を透明でくりぬいた画像を用意し描画します。 あとは、すべてのピクセルだけループしてそれが円形内かどうかをピタゴラスの定理で判定し、円外ならDrawPixcelで描画とか。(非推奨)
Re: 迷路ゲームに影をつけたい ( No.2 )
名前:いっち 日時:2010/03/10 18:41

Masaoさんがおっしゃるとおりいくつか方法があります。 せっかくなので透過画像を利用するサンプルを作成してみました。 ポイントは描画順序と SetDrawArea です。 実行には画像ファイルが3種類必要です。 特に"scope.png"はαチャネルではなく透過色の機能を利用しても可能です。 その場合 SetUseTransColor をコメントにして下さい。 //-- 以下サンプル (画像ファイルを3種使用) --// #include "DxLib.h" const char *MapFile = "map.png"; // 640x480を想定。内容は何でも可 const char *CharactorFile = "charactor.png"; // 32x32を想定。内容は何でも可 const char *ScopeFile = "scope.png"; // 128x128を想定。中央もしくは全体のαチャンネルが透過している画像を使用 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); SetUseTransColor( TRUE ); // 透過色を無効可 int BlindColor = GetColor( 128, 128, 128 ); // 見えない部分は灰色 int MapHandle = LoadGraph( MapFile ); int CharHandle = LoadGraph( CharactorFile ); int ScopeHandle = LoadGraph( ScopeFile ); int CharWidth, CharHight, ScopeWidth, ScopeHight; GetGraphSize( CharHandle, &CharWidth, &CharHight ); GetGraphSize( ScopeHandle, &ScopeWidth, &ScopeHight ); int CharX = (640 - CharWidth) / 2, CharY = (480 - CharHight) / 2; int ScopeOffX = -((ScopeWidth - CharWidth) / 2), ScopeOffY = -((ScopeHight - CharHight) / 2); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { if ( CheckHitKey( KEY_INPUT_UP ) && CharY > 0 ) CharY -= 3; if ( CheckHitKey( KEY_INPUT_DOWN ) && CharY < 480 - CharHight ) CharY += 3; if ( CheckHitKey( KEY_INPUT_LEFT ) && CharX > 0 ) CharX -= 3; if ( CheckHitKey( KEY_INPUT_RIGHT ) && CharX < 640 - CharWidth ) CharX += 3; ClearDrawScreen( ); DrawBox( 0, 0, 640, 480, BlindColor, TRUE ); SetDrawArea( CharX + ScopeOffX, CharY + ScopeOffY, CharX + ScopeOffX + ScopeWidth, CharY + ScopeOffY + ScopeHight ); DrawGraph( 0, 0, MapHandle, FALSE ); DrawGraph( CharX, CharY, CharHandle, TRUE ); DrawGraph( CharX + ScopeOffX, CharY + ScopeOffY, ScopeHandle, TRUE ); SetDrawArea( 0, 0, 640, 480 ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: 迷路ゲームに影をつけたい ( No.3 )
名前:めーろ 日時:2010/03/10 22:28

お返事ありがとうございます。 適切なアドバイスやサンプルプログラムまで本当にありがとうございます。 参考にして自分のプログラムに合うやり方を調べながら影を作ろうと思います。 Masaoさん、いっちさん、ありがとうございます。

Page: 1 |