龍神録の18章の当たり判定について。

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

龍神録の18章の当たり判定について。

#1

投稿記事 by たろう » 15年前

当たり判定を片方の移動量だけではなくもう片方の(スピードが早い)移動量も含めて当たり判定を
やろうとしているんのですが、
片方かもう片方の移動量の当たり判定がちゃんと計算されなくうまくいきません。(範囲内に入っていいるはずなのに通り抜けてしまいます。)
どうしたら通り抜けないでちゃんと当たり判定ができるのでしょうか?
質問がわかりにくいかもしれないのですがよろしくお願いします。
int atarihantei(float x1,float y1,float x2,float y2,float angle,float spd1,float spd2,float rang1, float rang2)
{
    float r=rang1+CRANG;
    float r2=rang2+CRANG;
    if(spd1>r)
    {
        float pre_x=x1+cos(angle+PI)*spd1,pre_y=y1+sin(angle+PI)*spd1;
        float now_x,now_y;
        for(int i=0;i<=spd1/r+1;i++)
        {
            now_x=pre_x-x2;
            now_y=pre_y-y2;
            if(now_x*now_x+now_y*now_y<(r)*(r))
            {
                return 1;
            }

            if(i==(int)spd1/r+1)
            {
                break;
            }
            if(i==(int)spd1/r)
            {
                pre_x+=cos(angle)*(spd1-i*r);
                pre_y+=sin(angle)*(spd1-i*r);
            }
            else
            {
                pre_x+=cos(angle)*r;
                pre_y+=sin(angle)*r;
            }
        }
    }
    if(spd2>r2)
    {
        float pre_x=x2+cos(angle+PI)*spd2,pre_y=y1+sin(angle+PI)*spd2;
        float now_x,now_y;
        for(int i=0;i<=spd2/r+1;i++)
        {
            now_x=pre_x-x1;
            now_y=pre_y-y1;
            if(now_x*now_x+now_y*now_y<(r2)*(r2))
            {
                return 1;
            }

            if(i==(int)spd2/r2+1 || spd2/r2==0)
            {
                break;
            }
            if(i==(int)spd2/r2)
            {
                pre_x+=cos(angle)*(spd2-i*r2);
                pre_y+=sin(angle)*(spd2-i*r2);
            }
            else
            {
                pre_x+=cos(angle)*r2;
                pre_y+=sin(angle)*r2;
            }
        }
    }

    if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)<r*r)
        return 1;
    return 0;
}

シエル

Re:龍神録の18章の当たり判定について。

#2

投稿記事 by シエル » 15年前

前に私が気にしていたことと同じことをやってますね。。。

私も相手の移動量が気になったので、
相手のスピードと自分の移動量を足したものが、当たり判定範囲を超えていたら
軌道計算しています。

今のところその方法で問題なく動いています。

あと前回の移動量は、実際の自分の移動量を足す直前に別の変数に保存しといたほうが
後で計算しやすいですよ。

それと、あまり龍神録の方法にとらわれずに自分で考えてやってみるのもいいですよ。
私は自分で考えてうまく当たり判定できるようになりました。

というか、ほとんど龍神録はほとんど見ずに他の部分も全部自分で考えて作っています。
そうしないとなかなか成長しないもので; 画像

閉鎖

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