Програмирам игра и стигнах до много трудно място. По принцип имам окръжност и имам 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 часа, опитвайки се да разбера това.