ページ 11

DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 02:24
by ジャーニー
お久しぶりですいつもお世話になっています.

今回質問させていただくのはDXライブラリの隠し関数であるDrawCircleGaugeです.
ゲームなどでよく用いられる円形バーを表示しようと思いDXライブラリに関数がないか探していたところDrawCircleGauge関数というものが見つかりました.

DrawCircleGauge( int CenterX, int CenterY, double Percent, int GrHandle ) ;
となっており,中心座標と扇状に何パーセント表示するかで構成されているようです.
しかしこれを使用したところ,変な表示になってしまいます.

添付した画像がどのように表示されているかなのですが,元画像が右で左が関数を使用したものになっています.
表示がギザギザになっており,また赤色領域の表示がおかしくなっています.
これらは直すことができるのでしょうか?
この関数では画像ファイルが2^xのサイズでしかうまく表示されませんが,この画像は128×128ピクセルなので画像サイズに関しては問題ないかと思います.

どなたかわかるかた回答をよろしくお願いします.

Re:DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 04:07
by Justy
 右のテクスチャでDrawCircleGaugeを使うと左のように円で表示されるのはちょっと解せませんが
とりあえず元テクスチャの方を DrawGraph等で普通に表示した時が 100%の時の円の絵になるよう
透明チャンネルを使って切り抜いてみてください。

 出来れば円の直径はテクスチャ幅の 7割以下の大きさで。
 一応うまく動くだろうサンプルを添付しておきますので、それで試してみて下さい。

 もしどう加工してもうまくいかないようでしたら、そのテクスチャを添付してもらえれば、
何かわかるかと思います。

Re:DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 16:53
by ジャーニー
返信が遅くなってしまい申し訳ありません

添付していただいたテクスチャと,こちらで作成したテクスチャを用いてテストしてみました.
結果色表示に関しては添付の画像のように問題なく表示されましたが,どちらのテクスチャも円周部分がギザギザになっています.
これはもうこの関数の仕様ということで判断し,αチャンネルでごまかすしかないのでしょうか?

このテストに使用したプログラムは以下のようになっています.
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode(TRUE);//ウィンドウモード
    if( DxLib_Init() == -1 )        // DXライブラリ初期化処理
    {
        return -1 ;            // エラーが起きたら直ちに終了
    }
    SetDrawScreen( DX_SCREEN_BACK );

    int s = LoadGraph("test.png");
    int s2 = LoadGraph("test2.png");
    double i=0;
    while(1)
    {
        DrawCircleGauge( 400, 200, i, s);
        DrawCircleGauge( 200, 200, i, s2);
        i+= 0.5;
        ScreenFlip();
        if( CheckHitKey(KEY_INPUT_ESCAPE) == 1 ) break;
    }
    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                // ソフトの終了 
}

Re:DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 16:54
by ジャーニー
すいません添付画像ではギザギザが緩和されていますが,実際に動かすと円周部分にギザギザが見られる程度になっています.

Re:DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 16:58
by Justy
 ループ内に ClearDrawScreenがないので、画面に延々と絵を上書きしていますよ。
 描く前に ClearDrawScreen関数で画面を消去してみてください。

Re:DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 17:02
by ジャーニー
関数を追加したら直りました.
こんな初歩ミスをおかすとは丁寧にテストするべきでしたね.
ありがとうございました.

Re:DXライブラリのDrawCircleGauge関数について

Posted: 2010年5月06日(木) 17:02
by ジャーニー
解決にします.