現状のDrawCircleGaugeは、上から時計回りに増やす使い方しかできませんが、
これを任意の場所から、任意の方向に増やすことが出来るようにできませんでしょうか?
DrawCircleGaugeを使わずに、以下のような処理で似たような事を再現しようとしたのですが、
表示ががたついてしまい、どこが致命的に悪いのかがわかりませんでした。
// paramに負を与えると反対方向、sangleが開始角。
void DrawMyCircleGauge(const int x,const int y,const int handle,const float param,const float sangle){
//パラメータを取得
float useparam=fabs(param)/25.0f;
int rev=(param>0.0)*2-1;
//長さを取得
int SX,SY;
GetGraphSize(handle,&SX,&SY);
//4つに分ける
for(int i=0;i<4;++i){
//使用する角度分
float ang=useparam;
if(ang>1.0f)ang=1.0f;
//使用した分だけ消費
useparam-=ang;
//宣言
VERTEX vec[3];
//位置を指定
vec[0].x=x+sinf(sangle +(i+ 0)*0.5f*PHI_F*rev)*SX;
vec[0].y=y+cosf(sangle +(i+ 0)*0.5f*PHI_F*rev)*SY;
vec[1].x=x+sinf(sangle +(i+ang)*0.5f*PHI_F*rev)*SX;
vec[1].y=y+cosf(sangle +(i+ang)*0.5f*PHI_F*rev)*SY;
vec[2].x=(float)x;
vec[2].y=(float)y;
//色は暫定
for(int j=0;j<3;++j){
vec[j].a=255;
vec[j].r=255;
vec[j].g=255;
vec[j].b=255;
}
//テクスチャ座標
vec[0].u=sinf(sangle +(i+ 0)*0.5f*PHI_F*rev)*1.0f+0.5f;
vec[0].v=cosf(sangle +(i+ 0)*0.5f*PHI_F*rev)*1.0f+0.5f;
vec[1].u=sinf(sangle +(i+ang)*0.5f*PHI_F*rev)*1.0f+0.5f;
vec[1].v=cosf(sangle +(i+ang)*0.5f*PHI_F*rev)*1.0f+0.5f;
vec[2].u=0.5f;
vec[2].v=0.5f;
//描画
DrawPolygon(vec,3,handle,TRUE,FALSE);
//角度を消費しきってたら中断
if(useparam<=0.0f)break;
}
}