【问题标题】:How does SKScene.anchorPoint affects physicsBody?SKScene.anchorPoint 如何影响physicsBody?
【发布时间】:2014-08-02 11:10:04
【问题描述】:

当我从屏幕 debugging with kView.showsPhysics = true 更改 GameScene (from default 0,0 to 0.5,0.5) 的 anchorPoint @ 精灵 disappeared 的物理主体时。

它仍然存在,因为每艘船都相互碰撞,但看起来physicsBody 的位置发生了偏移(超出屏幕)。

为什么此更改会影响场景子对象的物理体?

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)
        }
    }
}

【问题讨论】:

  • 这很奇怪,我刚刚发现在 iOS 8.0 模拟器中它可以工作(physicsBody 不受影响),但在 7.1 中,physicsBody 被移到了 SKScene 的左下角
  • 可能是旧 SDK 中的一个错误,因为它在 10.9 上是一样的,而且很烦人。

标签: ios swift sprite-kit skscene


【解决方案1】:

我也做了同样的事情。我将 SKScene 的锚点也放在中间(CGPointMake(0.5, 0.5)),它完全破坏了物理。您会注意到这一点,尤其是在向物理场景添加关节时,您将无法将物理关节锚点放置在正确的位置。

我的建议是,如果使用 SKPhysics,请不要更改 SKScene 锚点(花费我大量时间和重写来找出答案)。

【讨论】:

    【解决方案2】:

    改变场景的锚点不会改变物理世界的坐标。每个节点及其物理体也是如此。对于您自己的节点,您可以使用带有中心的特殊 SKPhysicsBody init 进行补偿:(拥有节点坐标系中的中心)。

    在物理世界里,你现在什么都做不了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2023-03-31
      • 2013-04-12
      相关资源
      最近更新 更多