Как говорится в заголовке, есть ли способ сделать что-то подобное:
Есть какой-либо способ сделать это? Если да, то как мне соотнести SKAction rotateToAngle
со стороной, обращенной к кругу?
Спасибо!
Как говорится в заголовке, есть ли способ сделать что-то подобное:
Есть какой-либо способ сделать это? Если да, то как мне соотнести SKAction rotateToAngle
со стороной, обращенной к кругу?
Спасибо!
Касательная окружности в любой заданной точке перпендикулярна радиусу, проведенному к этой точке. Считайте, что два узла находятся в полярной системе координат с началом в центре круга. Вы можете преобразовать декартовы координаты квадрата (в его центре) в полярные и найти угол правильного радиуса:
void cartopol(CGFloat x, CGFloat y, CGFloat *radius, CGFloat *theta)
{
*radius = sqrt(x*x, y*y);
*theta = atan2(y, x);
}
(Вместо этого это может вернуть CGPoint
, если вы предпочитаете использовать out параметры, как я сделаю ниже для дополнительной функции; арифметика является важным моментом.)
theta
будет в радианах; прибавьте или вычтите π/4, чтобы повернуть его на 90˚.
Чтобы переместить квадрат по кругу, выберите нужный угол и радиус и преобразуйте из полярного в декартово:
CGPoint poltocar(CGFloat radius, CGFloat theta)
{
return (CGPoint){radius * cos(theta), radius * sin(theta)};
}
Очень просто: добавьте прямоугольный спрайт (у него не должно быть собственного физического тела, хотя вы можете попытаться проверить, работает ли он со статическим телом) в качестве дочернего узла к круговому спрайту с физическим телом. Измените положение спрайта прямоугольника так, чтобы он был смещен от центра его родительского узла, т.е. {100, 0}, чтобы поместить узел круга на 100 точек дальше от центра.
Когда круговой спрайт и тело вращаются, прямоугольный спрайт будет двигаться и вращаться вместе с ним.