Как SKScene.anchorPoint влияет на physicsBody?

Когда я изменил anchorPoint для GameScene (from default 0,0 to 0.5,0.5), physicsBody для спрайта disappeared с экрана debugging with kView.showsPhysics = true.

Он все еще существует, потому что каждый корабль сталкивается друг с другом, но похоже, что положение физического тела было смещено (за пределы экрана).

Почему это изменение влияет на физикуBody дочернего элемента сцены?

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        anchorPoint = CGPointMake(0.5, 0.5)
        physicsWorld.gravity = CGVector(0, 0)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self)

            let sprite = SKSpriteNode(imageNamed:"Spaceship")

            sprite.physicsBody = SKPhysicsBody(circleOfRadius: 100)

            sprite.xScale = 0.5
            sprite.yScale = 0.5
            sprite.position = location

            let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)

            sprite.runAction(SKAction.repeatActionForever(action))

            self.addChild(sprite)
        }
    }
}

person Tomas El    schedule 02.08.2014    source источник
comment
Это странно, я только что обнаружил, что в симуляторе iOS 8.0 это работает (физика тела не затрагивается), но в 7.1 физика тела смещена в нижний левый угол SKScene.   -  person Tomas El    schedule 02.08.2014
comment
Возможно, это ошибка в старом SDK, потому что в 10.9 она такая же, и это раздражает.   -  person uchuugaka    schedule 04.08.2014


Ответы (2)


Я сделал то же самое. Я также поместил точку привязки SKScene посередине (CGPointMake(0.5, 0.5)) и это полностью разрушило физику. Вы заметите это, особенно при добавлении соединений в физическую сцену, вы не сможете поместить точки привязки физических соединений в нужное место.

Мой совет: не меняйте точку привязки SKScene при использовании SKPhysics (чтобы выяснить это, я потратил много времени и переписал).

person DionMes    schedule 22.09.2014

Изменение точки привязки сцены не меняет координаты физического мира. То же самое касается каждого узла и его физического тела. С вашими собственными узлами вы можете компенсировать, используя специальную инициализацию SKPhysicsBody с центром: (центр в системе координат узла-владельца).

С физическим миром пока ничего не поделаешь.

person Special guest    schedule 22.05.2015