У мене є 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
}