c# - 如何在目标阈值内简化图像停止运动

标签 c# comparison move target

我已经尝试过向其他人解释我要做什么,但失败得很惨。因此,如果您不介意的话,我将只向您展示代码并尝试稍微解释一下。

        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", "");
                }
            }
        }

    }

就是这样。如果您想知道所有对“宠物”的引用是什么,我正在为我的小妹妹制作一个 tamogotchi(或者无论您如何拼写)之类的游戏。

我遇到的问题是 MovePetSlope[1] 或 [0] 的值可以是正值也可以是负值。我提出了一些适用于正值但不适用于负值的比较。我相信在目前的状态下,它根本不起作用。

如有任何帮助,我们将不胜感激。

提前致谢!

最佳答案

尝试使用 Math.Abs​​ 来简化您的比较。 一般来说,宠物应该一直 move 直到Math.Abs(pictureBoxPet.Location.X-MovePetTarget[0]) < Math.Abs(MovePetSlope[0])。 Y 和 1 也类似。您最终应该得到很多更简单的代码。

如果您的宠物直接朝目标 move ,这应该可以解决问题:

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]);
}

关于c# - 如何在目标阈值内简化图像停止运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076388/

相关文章:

r - 对 R 中每列的矩阵行执行成对统计测试

c - C语言求两个字符串中最长的公共(public)词?

c# - 无法在 C# 中重命名目录,只能手动重命名

c++ - 将仅将构造函数 move 到 vector 的对象推回

c# - 如何点击页面的特定坐标

c# - 如何在 Asp.Net 的服务器端使用 JavaScript 对象?

java - 设置一个 int 使其始终是较大的值?

javascript - 拉斐尔 JS : how to move/animate a path object?

c# - 按最后一个分隔符拆分字符串

c# - 使用C#表单应用程序和youtube-v3-api在YouTube实时流聊天中插入评论