2

私はすでに自分がしようとしていることを他の人に説明しようとしましたが、ひどく失敗しました. したがって、失礼を承知で、コードを示して少し説明します。

        if (MovePetMoving)
        {
            if (MovePetSlope[0] > 0)
            {
                if (MovePetSlope[1] > 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] <= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] <= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] > 0 and MovePetSlope[1] > 0", "");
                }
                else if (MovePetSlope[1] < 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] <= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] >= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] > 0 and MovePetSlope[1] < 0", "");
                }
                else
                {
                    MovePetMoving = false;
                    //MsgBox("Error", "");
                }
            }
            else if (MovePetSlope[0] < 0)
            {
                if (MovePetSlope[1] > 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] >= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] <= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] < 0 and MovePetSlope[1] > 0", "");
                }
                else if (MovePetSlope[1] < 0 && Convert.ToDouble(pictureBoxPet.Location.X) + MovePetSlope[0] >= MovePetTarget[0] && Convert.ToDouble(pictureBoxPet.Location.Y) + MovePetSlope[1] >= MovePetTarget[1])
                {
                    MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
                    //MsgBox("MovePetSlope[0] < 0 and MovePetSlope[1] < 0" + Convert.ToString(pictureBoxPet.Location.X) + MovePetSlope[0] + MovePetTarget[0], "");
                }
                else
                {
                    MovePetMoving = false;
                    //MsgBox("Error", "");
                }
            }
        }

    }

そこにそれがある。「ペット」に関するすべての言及について疑問に思っているなら、私は妹のためにタモゴッチ (またはあなたがどのように綴っても) のようなゲームを作っています.

私が抱えている問題は、MovePetSlope[1] または [0] の値が正または負のいずれかになる可能性があることです。正の値で機能する比較をいくつか思いつきましたが、負の値では機能しません。今の状態では、まったく機能していないと思います。

どんな助けでも大歓迎です。

前もって感謝します!

4

2 に答える 2

1

Math.Abs​​ を使用して比較を簡素化してみてください。一般に、ペットはMath.Abs(pictureBoxPet.Location.X-MovePetTarget[0]) < Math.Abs(MovePetSlope[0])Y と 1 まで同様に動き続ける必要があります。最終的には、はるかに単純なコードになるはずです。

あなたのペットがターゲットに向かってまっすぐ動いている場合、これはうまくいくはずです:

if (MovePetMoving)
{
    if (Math.Abs(pictureBoxPet.Location.X-MovePetTarget[0]) < Math.Abs(MovePetSlope[0]))
        MovePetMoving = false;
    else
        MovePetWorker(pictureBoxPet, pictureBoxPet.Location.X + MovePetSlope[0], pictureBoxPet.Location.Y + MovePetSlope[1]);
}
于 2010-01-16T06:20:29.107 に答える
1

別の戦略:

  1. 画面座標でターゲット境界を保持する Rectangle 型の変数を定義します。定義したしきい値変数に従って、必要に応じて境界を増やします。

  2. PictureBox の MouseUp および MouseDown イベント ハンドラーを定義する

  3. PictureBox で (MouseDown イベント ハンドラーで) マウスがダウンしたときに true に設定され、PictureBox の MouseUp ハンドラーで false に設定されるブール変数を (フォーム スコープで) 定義します。

  4. 次のような PictureBox の MouseMove イベント ハンドラーを定義します。

    を。ブール変数が true の場合 (マウスがダウンしている)

    1. Rectangle.IntersectsWith メソッドを使用して、PictureBox の現在の境界がターゲット境界の四角形と重なるかどうかを確認します。MSDN Rectangle.IntersectsWith : 停止できることがわかっている場合。

私見、この戦略を使用すると、大幅に簡素化されたコードを書くことができます。

于 2010-01-16T06:34:23.107 に答える