Дочерний объект не перемещается, когда перемещается родительский узел?

У меня есть три узла мира, игрок и "видение игрока". И мир, и видение 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 шаг кадра. Это приведет к сбросу узла обзора, чтобы он всегда "следовал" за родительским узлом.

Другие вопросы по тегам