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