Я уже пытался объяснить, что я пытаюсь сделать с другими, и потерпел неудачу. Поэтому, если вы извините меня, я просто покажу вам код и попытаюсь немного объяснить.
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] может быть положительным или отрицательным. Я придумал некоторые сравнения, которые работают для положительных значений, но не для отрицательных значений. Я считаю, что в этом текущем состоянии он вообще не работает.
Любая помощь будет принята с благодарностью.
Спасибо заранее!
Попробуйте использовать 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]);
}
Другая стратегия:
определить переменную типа Rectangle, которая содержит границы целевых объектов в координатах экрана: при необходимости увеличивайте границы по определенной пороговой переменной.
определить обработчики событий MouseUp и MouseDown для PictureBox
определить логическую переменную (в области формы), которая установлена в true, когда мышь опускается (в обработчике событий MouseDown) в PictureBox и false в обработчике MouseUp для PictureBox.
определить обработчик события MouseMove для PictureBox, в котором:
а. если логическая переменная истинна (мышь опущена)
imho, используя эту страгию, вы можете написать очень упрощенный код.