0

衝突検出アルゴリズムを正しく機能させるのに苦労しています。0 と 1 を含む .txt からデータを読み込んでいます (0 は空のスペースで、1 は通過できません)。私のアルゴリズムは時々キャッチしませんが、最終的には機能しません。私の現在のアルゴリズムは以下に掲載されています.sepは私の精神が重ならないようにするための分離値です.

private void collisionDetect()
{
    float diffxleft, diffxright, diffytop, diffybottom;
    float diffx, diffy;

    hit = false;
    foreach (Block b in blocks)
    {
        if (hit)
            break;
        if (inside(charPos, sep, b))
        {
            hit = true;
            diffxleft = Math.Abs(charPos.X + sep - b.pos.X);
            diffxright = Math.Abs(charPos.X - sep - (b.pos.X + b.rect.Width));
            diffytop = Math.Abs(charPos.Y + sep - b.pos.Y);
            diffybottom = Math.Abs(charPos.Y - sep - (b.pos.Y + b.rect.Height));
            diffx = Math.Min(diffxleft, diffxright);
            diffy = Math.Min(diffytop, diffybottom);
            if (diffx < diffy)
            {
                charVel.X = 0;
                if (diffxleft < diffxright)
                    charPos.X = b.pos.X - sep;
                else
                    charPos.X = b.pos.X + b.rect.Width + sep;
            }
            else
            {
                charVel.Y = 0;
                if (diffytop < diffybottom)
                    charPos.Y = b.pos.Y - sep;
                else
                    charPos.Y = b.pos.Y + b.rect.Height + sep;
            }
        }
    }

    foreach (Block b in blocks)
    {
        b.disp.X = b.pos.X + 10 - bkgdisplay.X;
        b.disp.Y = 470 - b.pos.Y;
    }
    charPosDisp.X = charPos.X - bkgdisplay.X;
    charPosDisp.Y = 480 - charPos.Y;
}

ヘルプ!

4

1 に答える 1