Есть ли способ сделать вращение SKSpriteNode параллельным физическому телу другого SKSpriteNode?

Как говорится в заголовке, есть ли способ сделать что-то подобное:

Параллельный узел SKSpriteNode

Есть какой-либо способ сделать это? Если да, то как мне соотнести SKAction rotateToAngle со стороной, обращенной к кругу?

Спасибо!


person Burrito411    schedule 05.04.2014    source источник
comment
Что вы подразумеваете под параллелью окружности? Параллельно касательной окружности? Вы хотите, чтобы одна и та же сторона квадрата была обращена к кругу независимо от того, куда движется сукаре?   -  person jscs    schedule 06.04.2014
comment
Правильно, я хочу, чтобы ракета была параллельна касательной. Квадрат также должен двигаться по окружности круга.   -  person Burrito411    schedule 06.04.2014


Ответы (2)


Касательная окружности в любой заданной точке перпендикулярна радиусу, проведенному к этой точке. Считайте, что два узла находятся в полярной системе координат с началом в центре круга. Вы можете преобразовать декартовы координаты квадрата (в его центре) в полярные и найти угол правильного радиуса:

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)};
}
person jscs    schedule 06.04.2014

Очень просто: добавьте прямоугольный спрайт (у него не должно быть собственного физического тела, хотя вы можете попытаться проверить, работает ли он со статическим телом) в качестве дочернего узла к круговому спрайту с физическим телом. Измените положение спрайта прямоугольника так, чтобы он был смещен от центра его родительского узла, т.е. {100, 0}, чтобы поместить узел круга на 100 точек дальше от центра.

Когда круговой спрайт и тело вращаются, прямоугольный спрайт будет двигаться и вращаться вместе с ним.

person LearnCocos2D    schedule 07.04.2014