読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 758 - Sprite Kit やっとSKPhysicsJointFixed

少し複雑なSKSpriteKitのチュートリアルに取り組んでいます。

www.raywenderlich.com

GameSceneにノードを設定するメソッドをまだ書いています(^^;)

func newProjectile () {
    let beaker = SKSpriteNode(imageNamed: "beaker")
    beaker.name = "beaker"
    beaker.zPosition = 5
    beaker.position = CGPoint(x: 120, y: 625)
    let beakerBody = 
    SKPhysicsBody(rectangleOf: CGSize(width: 40, height: 40))
    beakerBody.mass = 1.0
    beakerBody.categoryBitMask = 
        PhysicsT
    beakerBody.collisionBitMask = 
        PhysicsType.wall | PhysicsType.cat
    beaker.physicsBody = beakerBody
    addChild(beaker)

ここでやっと「SKPhysicsJointFixed」が出てきます。昨日説明した「addChild()」メソッドがどこ(どのSKNode)から発動されているのか分かっていないので、次に出てくる「childNode()」メソッドの発動先がどこか分かりません。「addChild()」と同じSKNodeだと思います。直感的にGameScene.sksで設定している「bk」のような気もします。GameScene.sksに設置している「player」ノードと「arm」ノードを融合させるために「childNode()」メソッドを使っているのですが、その関係性がイマイチ分かってないです(^_^;)

以下の説明をしていこうと思っていたのですが、もう少し「addChild()」と「childNod()」の関係性を勉強して出直します。

    if let armBody = 
        childNode(
            withName: "player")?.childNode(
                withName: "arm")?.physicsBody {
        pinBeakerToZombieArm = 
            SKPhysicsJointFixed.joint(withBodyA: armBody, 
                                          bodyB: beakerBody, 
                                         anchor: CGPoint.zero)
        physicsWorld.add(pinBeakerToZombieArm!)
        beakerReady = true
    }
}