Преобразование радиан угла в CGVector
Используя Sprite Kit, я пытаюсь установитьSKPhysicsBody
двигаясь в соответствии с заданным углом, например, если вы хотите, чтобы спрайт двигался вправо, вы должны указать 1.571 радиан. Чтобы превратить указанный угол в скорость, я использую метод ниже, чтобы преобразовать радианы вCGVector
, ОРИГИНАЛЬНАЯ версия, которую я реализовал по памяти, имеет странный эффект смещения всех углов на 90 градусов. (т.е. если используется 0 градусов, спрайт движется вправо (как если бы вы указали 90 градусов)
Я исправил это в новой версии, поменяв местамиdx
а такжеdy
задания. Мой вопрос: почему это происходит, неправильно ли я это делаю в оригинале (кажется, что другие делают это в Интернете) или есть какая-то причина, основанная на конкретной используемой системе координат?
// ORIGINAL
- (CGVector)convertAngleToVector:(CGFloat)radians {
CGVector vector;
vector.dx = cos(radians) * 10;
vector.dy = sin(radians) * 10;
NSLog(@"DX: %0.2f DY: %0.2f", vector.dx, vector.dy);
return vector;
}
// NEW, SWAPPED DX & DY
- (CGVector)convertAngleToVector:(CGFloat)radians {
CGVector vector;
vector.dy = cos(radians) * 10;
vector.dx = sin(radians) * 10;
NSLog(@"DX: %0.2f DY: %0.2f", vector.dx, vector.dy);
return vector;
}
НОТА: также в Sprite Kit вращения по часовой стрелке отрицательны, покаconvertAngleToVector
делает положительные вращения по часовой стрелке (то есть 1.571 радиан вправо, там, где он должен быть оставлен), я мог бы просто сделатьcos(radians*-1)
а такжеsin(radians*-1)
но для этого может быть какая-то причина, основанная на том, что я меняю местами dx и dy.