アイテムロール!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
C権化
記事: 14
登録日時: 9年前

アイテムロール!

#1

投稿記事 by C権化 » 9年前

助言いただけると幸いです。
添付画像ファイルのように、小、中、大、中、小と四角があって、
ボタンを押すと、回転しているようにみせたいのですが、

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);
    }
これの訂正だけでなく、もし実装サンプル等がありましたらよろしくお願いします。
添付ファイル
item.jpg
item.jpg (6.91 KiB) 閲覧数: 913 回

アバター
ookami
記事: 214
登録日時: 10年前
住所: 東京都

Re: アイテムロール!

#2

投稿記事 by ookami » 9年前

各変数の意味など書いてもらえると分かりやすそうですが、
ぱっと見、
1/175

1.0/175.0
あたりかも?

アバター
C権化
記事: 14
登録日時: 9年前

Re: アイテムロール!

#3

投稿記事 by C権化 » 9年前

言われた通りに変えたら拡大率が正常になりました。
たったこれだけのことだったなんて・・・
int型からdouble型へは変換されませんでしたか?

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

アバター
ookami
記事: 214
登録日時: 10年前
住所: 東京都

Re: アイテムロール!

#4

投稿記事 by ookami » 9年前

おぉ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...

といった具合に。

アバター
C権化
記事: 14
登録日時: 9年前

Re: アイテムロール!

#5

投稿記事 by C権化 » 9年前

0になってしまっていたんですね。
本当にありがとうございました、早い返信も助かります。
しかし!これではロールじゃありませんでした。
画像添付したように、クロワッサンみたいになってしまいました。

こちらも助言がいただけたらと、ぶしつけながら
お願いします。自身でも考えてみます。
添付ファイル
item.jpg
item.jpg (11.83 KiB) 閲覧数: 896 回

アバター
ookami
記事: 214
登録日時: 10年前
住所: 東京都

Re: アイテムロール!

#6

投稿記事 by ookami » 9年前

> しかし!これではロールじゃありませんでした。
> 画像添付したように、クロワッサンみたいになってしまいました。

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

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

アバター
沖 滉均
記事: 237
登録日時: 10年前
住所: K県F市

Re: アイテムロール!

#7

投稿記事 by 沖 滉均 » 9年前

画像ぱっと見だと、ボタンを押している間、画面更新されていないように見えますね。
この関数を呼んでいる間に画面の更新処理を飛ばしていないか確認してみてください。
There is no royal road to learning.
codeタグで指定できる言語
画像

アバター
C権化
記事: 14
登録日時: 9年前

Re: アイテムロール!

#8

投稿記事 by C権化 » 9年前

画像更新されてないのではなく、
アイテムを変えるボタンで回るアニメーションのよう
にしたいのですが、位置が少しずれたアイテム欄がたくさん
表示されてしまいます。

アバター
ookami
記事: 214
登録日時: 10年前
住所: 東京都

Re: アイテムロール!

#9

投稿記事 by ookami » 9年前

まぁ実装の仕方はいろいろ考えられますが、
私なら...

コード:

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の部分はコピっただけなので、
合っているかどうか分かりません。

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

アバター
C権化
記事: 14
登録日時: 9年前

Re: アイテムロール!

#10

投稿記事 by C権化 » 9年前

できました!!
私の質問に長く答えていただきありがとうございました。
ookamiさんのおかげで先へすすめそうです。

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

閉鎖

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