Я программирую игру и попал в очень трудную ситуацию. В основном у меня есть круг, и у меня есть 2 угла на этом круге. Угол 1 (A) — это точка, к которой я хочу, чтобы угол 2 (B) шел. Во время моей игры каждый кадр мне нужно проверять, увеличивать или уменьшать значение угла на определенную величину (скорость), чтобы в конечном итоге достичь первого угла. Мой вопрос, как мне это сделать?
Я пытался сделать это, но, похоже, я делаю это неправильно.
bool increase = false;
float B = [self radiansToDegrees:tankAngle];
float A = [self radiansToDegrees:tankDestinationAngle];
float newAngle = B;
if(B < A) {
float C = B - (360 - A);
float D = A - B;
if(C < D) increase = false;
else increase = true;
} else if(B > A) {
float C = B - A;
float D = A - (360 - B);
if(C < D) increase = false;
else increase = true;
}
if(increase) {
newAngle += 1.0;
} else {
newAngle -= 1.0;
}
if(newAngle > 360.0) {
newAngle = 0 + (newAngle - 360.0);
} else if(newAngle < 0.0) {
newAngle = 360 + newAngle;
}
if(newAngle == 0) newAngle = 360;
newAngle = [self degreesToRadians:newAngle];
[self setTanksProperPositionRotation:newAngle];
Основной эффект, которого я пытаюсь достичь, заключается в том, что когда пользователь создает новую точку, которая будет углом 1, угол 2 будет двигаться к углу 1, выбирая самое быстрое направление. Я думаю, что потратил около 4 часов, пытаясь понять это.