首页 文章

调整使用SKPhysicsBody(circleOfRadius :)创建的SpriteKit SKPhysicsBody的大小

提问于
浏览
2

我正在构建一个SpriteKit "chain reaction"游戏,其中圈子变大,因为它们是"explode" . 我正在使用 SKPhysicsBody(circleOfRadius:) 初始化程序为圆圈创建物理主体 .

不幸的是,这些物理机构没有我可以设置的暴露 .radius 属性 . 有没有办法在SpriteKit中调整物理体的大小,或者我是否需要每帧都创建一个新的物理体? (这是我在下面所做的,代码工作正常,但在更新循环中创建新物理主体感觉效率非常低 . )

PS - 我知道圈子我可以轻松地使用trig进行准确的碰撞检测以获得距离,但我想使用SpriteKit碰撞检测来获得其他一些效果 .

func moveCircles(dt:CGFloat){
   enumerateChildNodesWithName("circle") { node, stop in
     let c = node as! CircleSprite
     var halfWidth = c.size.width / 2.0
     c.update(dt) // in update() exploding circles get larger.
         if c.isExploding{
        // FIXME: Have to make a new physics body every update - I don't like this!
            c.physicsBody = SKPhysicsBody(circleOfRadius: halfWidth)
            c.physicsBody?.categoryBitMask = CollisionCategories.ExplodingCircle
            c.physicsBody?.contactTestBitMask = CollisionCategories.Circle
            c.physicsBody?.collisionBitMask = 0
            c.physicsBody?.dynamic = true // the default
        }
  }
}

1 回答

  • 4

    您可能想要阅读更多here . 无法调整physicsBody的大小,建议您创建一个新的physicsBody并将其分配给节点 .

相关问题