オプションの位置について

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

オプションの位置について

#1

投稿記事 by ミジンコ » 15年前

こんにちは、このサイトを利用しながら東方風のゲームを作ってるものです。

今オプションの配置を地霊殿の霊夢・紫装備のようにパワーに応じた数のオプションが自機の周りを回転するのを再現したいのですが、どうもうまくいきません。
int op_num(int n){
    if(n>=100 && n<200){
        return 1;
    }
    if(n>=200 && n<300){
        return 2;
    }
    if(n>=300 && n<400){
        return 3;
    }
    if(n>=400){
        return 4;
    }
    return 0;
}

//オプションのぼんぼん計算
void calc_option_bb(){
  int num=op_num(ch.power);
        if(ch.power>=100){//パワー100以上ならオプションをつける
                for(int i=0;i<num;i++){
                        if(CheckStatePad(configpad.slow)==0){//低速移動中じゃないなら
                            option_bb.x=ch.x+cos(PI2/num*i+PI2/80*option_bb.cnt)*50;
                            option_bb.y=ch.y+sin(PI2/num*i+PI2/80*option_bb.cnt)*50;
                        }
                        else{
                            option_bb.x=ch.x+cos(PI2/num*i+PI2/80*option_bb.cnt)*25;
                            option_bb.y=ch.y+sin(PI2/num*i+PI2/80*option_bb.cnt)*25;
                        }
                        option_bb.cnt++;
                }
        for(int i=0;i<num;i++){
            if(option_bb.flag==0)
                option_bb[i].flag = 1;
        }
        }
        else{
        if(option_bb[0].flag==1)
                for(int i=0;i<num;i++){
                    option_bb[i].flag = 0;
        }
        }
}

のようにしてop_num()で出てきた値を使ってPI2を分割してみましたが、毎回位置がずれてしまいます;

開発環境は
Windows xp
VC++ 2008
です

チルチル

Re:オプションの位置について

#2

投稿記事 by チルチル » 15年前

龍神録のコードが理解できていないので実行して確認はしていませんが

毎回位置がずれるというのはオプションが等間隔に並ばなくて
なおかつ間隔が毎回バラバラに変化すると言う事でしょうか?

だとすると怪しいのは

option_bb.x=ch.x+cos(PI2/num*i+PI2/80*option_bb.cnt)*50;

これと他3ヵ所ですね

option_bb.cntは同じ値にならないと思うので
せめてch.cntにしてみてください

まあ被弾した時にずれるのですが不変なカウンタが見当たらないので・・

あと今回の問題とは関係無いと思いますけど
for(int i=0;i<num;i++){
    if(option_bb.flag==0)
        option_bb.flag = 1;
}
これってオプションが減った時に対応できなくないですか?

それから
if(option_bb[0].flag==1)
        for(int i=0;i<num;i++){
            option_bb.flag = 0;
    }
}
このfor文は実行されるんでしょうか?

ミジンコ

Re:オプションの位置について

#3

投稿記事 by ミジンコ » 15年前

回答ありがとうございます!
症状はチルチルさんがおっしゃる通りです

>>option_bb.cntは同じ値にならないと思うので
なるほど、それぞれが出現するタイミングがずれると足す角度も等しくならないということですか
・・・・・・ch.cntでちゃんとできました、ありがとうございます!!
四つともで同じカウントを使う必要があったのですね

>>これってオプションが減った時に対応できなくないですか
確かにそうですね
見た目にはちゃんと減っていたので気にしてませんでした;;
これだと例えばオプション数が4から3になった時4つめが1つめにかぶってるんですね
for(int i=num;i<4;i++){
    if(option_bb.flag==1)
        option_bb.flag = 0;
}

を追加して余分なものを消すようにしてみました

>>このfor文は実行されるんでしょうか?
あ、ホントですね・・・
ch.powerが100未満の時にすべてのフラグを初期化するところなのでこの場合numではなく4で大丈夫そうですね

チルチルさん、おかげで助かりました
自分が気づいてない所もご指摘いただき感謝の極みですm(_ _)m

閉鎖

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