ページ 11

アイテムロール!

Posted: 2010年11月29日(月) 13:07
by C権化
助言いただけると幸いです。
添付画像ファイルのように、小、中、大、中、小と四角があって、
ボタンを押すと、回転しているようにみせたいのですが、

VC++2010で
DxlibのDrawRotaGraphを使い、for文で拡大率と座標を移動させて
やろうとしましたが、拡大率が紙計算だと合っているのに、
実際に動かすとあわず、サイズが隣のサイズになりません。
座標は次の座標にいきます。
参考コードを載せておきます、変数等を具体的な数値にしてあります。

コード:

void graph_Itembox(){
	double d,o,u,b;
	int inputpad_ic=CheckStatePad(configpad.itm_chg);
	if(inputpad_ic)
		for(b=0.0; b<=35; b+=1.0)
		DrawRotaGraph(365+b,(465-b/3.5),0.5+1/175*b,0.0,img_itm_back[0],TRUE);
	else DrawRotaGraph(365,465,0.5,0.0,img_itm_back[0],TRUE);
	if(inputpad_ic)
		for(d=0.0; d<=50; d+=1.0)
		DrawRotaGraph(400+d,(455-d/5.0),(0.7+3/500*d),0.0,img_itm_back[0],TRUE);
	else DrawRotaGraph(400,455,0.7,0.0,img_itm_back[0],TRUE);
	if(inputpad_ic)
		for(o=0.0; o<=50; o+=1.0)
		DrawRotaGraph(450+o,(455+o/5.0),(1.0-3/500*o),0.0,img_itm_bac[0],TRUE);
	else DrawRotaGraph(450,445,1.0,0.0,img_itm_back[0],TRUE);
	if(inputpad_ic)
		for(u=0.0; u<=35; u+=1.0)
		DrawRotaGraph(500+u,(455+u/3.5),(0.7-1/175*u),0.0,img_itm_back[0],TRUE);
	else DrawRotaGraph(500,455,0.7,0.0,img_itm_back[0],TRUE);
	
	DrawRotaGraph(535,465,0.5,0.0,img_itm_back[0],TRUE);
    }
これの訂正だけでなく、もし実装サンプル等がありましたらよろしくお願いします。

Re: アイテムロール!

Posted: 2010年11月29日(月) 13:29
by ookami
各変数の意味など書いてもらえると分かりやすそうですが、
ぱっと見、
1/175

1.0/175.0
あたりかも?

Re: アイテムロール!

Posted: 2010年11月29日(月) 13:53
by C権化
言われた通りに変えたら拡大率が正常になりました。
たったこれだけのことだったなんて・・・
int型からdouble型へは変換されませんでしたか?

パっとみておかしい!とされた理由をおしえていただけませんでしょうか。

Re: アイテムロール!

Posted: 2010年11月29日(月) 14:01
by ookami
おぉw 当たってましたか。

> int型からdouble型へは変換されませんでしたか?

それがされないんですね。int割るintは、小数点以下が切り捨てられ、intで返されます。
.0をつけたり(double)で修飾すると、double型と認識されます。

たとえば、

1/175 → 0
10/3 → 3

1.0/175.0 → 0.0057...
10.0/3.0 → 3.33...

(double)1/(double)175 → 0.0057...
(double)10/(double)3 → 3.33...

といった具合に。

Re: アイテムロール!

Posted: 2010年11月29日(月) 14:12
by C権化
0になってしまっていたんですね。
本当にありがとうございました、早い返信も助かります。
しかし!これではロールじゃありませんでした。
画像添付したように、クロワッサンみたいになってしまいました。

こちらも助言がいただけたらと、ぶしつけながら
お願いします。自身でも考えてみます。

Re: アイテムロール!

Posted: 2010年11月29日(月) 14:50
by ookami
> しかし!これではロールじゃありませんでした。
> 画像添付したように、クロワッサンみたいになってしまいました。

これは...
ちょっと画像がよく分かりませんが、

ソースから察するに、
ボタンを押している間だけ、
何重にもアイテム画像が重なってしまう、
ということでしょうかね。

Re: アイテムロール!

Posted: 2010年11月29日(月) 14:58
by 沖 滉均
画像ぱっと見だと、ボタンを押している間、画面更新されていないように見えますね。
この関数を呼んでいる間に画面の更新処理を飛ばしていないか確認してみてください。

Re: アイテムロール!

Posted: 2010年11月29日(月) 15:32
by C権化
画像更新されてないのではなく、
アイテムを変えるボタンで回るアニメーションのよう
にしたいのですが、位置が少しずれたアイテム欄がたくさん
表示されてしまいます。

Re: アイテムロール!

Posted: 2010年11月29日(月) 16:55
by ookami
まぁ実装の仕方はいろいろ考えられますが、
私なら...

コード:

bool isrolling=false; // trueなら回転中。falseなら回転してない。
double d=0.0; // 回転中は50.0 までカウントアップ

void graph_Itembox(){
    if(!isrolling && ボタンを押した) {
        isrolling=true;
        d=0.0;
    }
    if(isrolling) {
        d+=1.0;
        if(d>=50.0) {
            d=0.0;
            isrolling=false;
        }
    }
    
    DrawRotaGraph(400+d,(455-d/5.0),(0.7+3/500*d),0.0,img_itm_back[0],TRUE);
    :
    :
}
こんな感じですかね...
DrawRotaGraphの部分はコピっただけなので、
合っているかどうか分かりません。

コメント少なめですが、参考になりますでしょうか?

Re: アイテムロール!

Posted: 2010年11月29日(月) 17:33
by C権化
できました!!
私の質問に長く答えていただきありがとうございました。
ookamiさんのおかげで先へすすめそうです。

また、困った時質問するかもしれません、その時もよろしくお願いします。