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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジャーニー

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

#1

投稿記事 by ジャーニー » 15年前

お久しぶりですいつもお世話になっています.

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

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

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

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

Justy

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

#2

投稿記事 by Justy » 15年前

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

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

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

ジャーニー

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

#3

投稿記事 by ジャーニー » 15年前

返信が遅くなってしまい申し訳ありません

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

このテストに使用したプログラムは以下のようになっています.
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関数について

#4

投稿記事 by ジャーニー » 15年前

すいません添付画像ではギザギザが緩和されていますが,実際に動かすと円周部分にギザギザが見られる程度になっています.

Justy

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

#5

投稿記事 by Justy » 15年前

 ループ内に ClearDrawScreenがないので、画面に延々と絵を上書きしていますよ。
 描く前に ClearDrawScreen関数で画面を消去してみてください。

ジャーニー

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

#6

投稿記事 by ジャーニー » 15年前

関数を追加したら直りました.
こんな初歩ミスをおかすとは丁寧にテストするべきでしたね.
ありがとうございました.

ジャーニー

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

#7

投稿記事 by ジャーニー » 15年前

解決にします.

閉鎖

“C言語何でも質問掲示板” へ戻る