Дочерний объект не перемещается, когда перемещается родительский узел?
У меня есть три узла мира, игрок и "видение игрока". И мир, и видение SKShapeNodes, и мой плеер используют пользовательский подкласс SKShapeNode. Когда я перемещаю мир, все игроки двигаются вместе с ним, однако, когда я двигаю игрока, узел зрения остается неподвижным в своей позиции. Что может быть причиной этого?
Это мой класс игрока:
class Character : SKShapeNode {
var vision : SKShapeNode
var spinning = false
init(size: CGSize) {
vision = SKShapeNode()
// Player Shape
super.init()
self.path = SKShapeNode(rectOfSize: size).path
self.fillColor = SKColor.blackColor()
self.strokeColor = SKColor.blackColor()
self.name = "Player"
// Player Physics Body
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size)
self.physicsBody.restitution = 0
self.physicsBody.allowsRotation = false
self.physicsBody.categoryBitMask = ColliderType.Player.toRaw()
self.physicsBody.collisionBitMask = ColliderType.Wall.toRaw()
self.physicsBody.contactTestBitMask = ColliderType.Wall.toRaw() | ColliderType.Player.toRaw() | ColliderType.Enemy.toRaw()
// Vision Shape
vision = SKShapeNode(rectOfSize: CGSize(width: 200, height: 1))
vision.fillColor = SKColor.greenColor()
// Vision Physics body
vision.physicsBody = SKPhysicsBody(rectangleOfSize: vision.frame.size)
vision.physicsBody.affectedByGravity = false
vision.physicsBody.categoryBitMask = ColliderType.Vision.toRaw()
vision.physicsBody.collisionBitMask = 0
vision.physicsBody.contactTestBitMask = ColliderType.Wall.toRaw()
self.addChild(vision)
}
}
1 ответ
Решение
Проблема в том, что физический движок воздействует на ваш узел зрения отдельно от его родителя из-за его собственной физики. Решение состоит в том, чтобы установить узел зрения position
собственность на CGPoint(0, 0)
(или что вы хотите, чтобы это было в системе координат его родителя) в didSimulatePhysics
шаг кадра. Это приведет к сбросу узла обзора, чтобы он всегда "следовал" за родительским узлом.