/ / Як обертати лише батьківський SKSpriteNode, а не дочірній вузол - sprite-kit

Як повернути тільки батьківський SKSpriteNode, а не дочірній вузол - sprite-kit

У мене є SKSpriteNode що має єдину дитину SKSpriteNode. Коли я обертаю батьківський вузол (з SKAction rotateByAngle), дочірній вузол також обертається. Я спробував досить багато речей (встановлення дитини) zRotation до 0, налаштування allowsRotation=NO, навіть роблячи ці речі в didSimulatePhysics), але дитина все одно обертається з батьком. Як я можу запобігти цьому?

Відповіді:

5 за відповідь № 1

Дуже просто:

node.parent.rotation = 90;
node.rotation = -90;

В основному просто встановіть обертання дитини на обернене обертання батьків.


0 для відповіді № 2

Якщо позиція дочірнього вузла (0, 0), ви будетепотрібно регулювати лише його обертання. Якщо дитина не має походження, вам потрібно буде відрегулювати її положення та обертання, щоб врахувати обертання батька. Ось приклад того, як це зробити (у Swift):

Обчисліть і зберігайте кут і радіус дитини відносно його батька

    let dx = child.position.x
let dy = child.position.y

childAngle = atan2(dy, dx)
childRadius = sqrt(dx*dx+dy*dy)

Відрегулюйте положення / обертання дитини, щоб протидіяти повороту батька. Це слід виконувати після того, як будуть оцінені всі дії.

override func didEvaluateActions() {
let angle = node.zRotation
let angleOffset = -angle + childAngle
let x = childRadius * cos(angleOffset)
let y = childRadius * sin(angleOffset)
child.position = CGPointMake(x, y)
child.zRotation = -angle
}