[iOS 8] SpriteKit でミニゲームをつくる #12 物理エンジン 物理ボディー

[iOS 8] SpriteKit でミニゲームをつくる #12 物理エンジン 物理ボディー

Clock Icon2014.09.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

物理エンジン 物理ボディー

今回は、「ピン」ボタンをタップして、風船が割れてペンギンが落下して、氷の島に着地するところを作ってみます。
コードは、「#11 ホバリングアクション」からの続きです。

まず、氷の島を物理演算対象にするために物理ボディーをセットします。
didMoveToViewメソッド内で初期処理の後に記述します。

    override func didMoveToView(view: SKView) {
        
        ....................
        ....................
        ....................
        
        
        // 氷の島スプライトを取得する。
        let isLand = childNodeWithName("scrollLayer")?
            .childNodeWithName("isLandLayer")?
            .childNodeWithName("isLand") as SKSpriteNode
        
        // 物理ボディーを生成する。
        let physicsBody = SKPhysicsBody(rectangleOfSize: isLand.size,
            center: CGPointMake(0, -24))
        
        // 動的に動かないようにする。
        physicsBody.dynamic = false
        
        // 摩擦を最大にする。
        physicsBody.friction = 1.0
        
        // バウンドをしないようにする。
        physicsBody.restitution = 0.0
        
        // 氷の島に物理ボディーをセットする。
        isLand.physicsBody = physicsBody
    }


次にペンギンも物理演算対象にします。タイミングは風船が割れたときです。
ペンギンは風船が割れて自由落下するので、「dynamic」はデフォルト値の「true」のままにします。

    func breakBalloon() {
        let isLandLayer = childNodeWithName("scrollLayer")?.childNodeWithName("isLandLayer")
        let flyingPenguin:SKSpriteNode! = isLandLayer?.childNodeWithName("flyingPenguin") as SKSpriteNode!
        
        if flyingPenguin == nil {
            return
        }
        
        // ホバリングアクションを止める。
        flyingPenguin.removeAllActions()
        
        // 名前を変更する。
        flyingPenguin.name = "fallenPenguin"
        
        // 物理ボディーを生成する。
        let physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(76.0, 76.0))
        
        // 摩擦を最大にする。
        physicsBody.friction = 1.0
        
        // バウンドをしないようにする。
        physicsBody.restitution = 0.0
        
        // ペンギンに物理ボディーをセットする。
        flyingPenguin.physicsBody = physicsBody
        
        // 風船を削除する。
        flyingPenguin.childNodeWithName("balloon")?.removeFromParent()
    }


では、動かしてみます。

stack_penguin_12_01

ゲームっぽくなってきました。
動きを見たい方は、ぜひ「つみペンギン」をダウンロードしてみてください。

次回へ続く。ではでは。

完成品はこちら。つみペンギン
つみペンギン stack_penguin_qrcode

姉妹品はこちら。ペンギン陸上-スプリント-
ペンギン陸上-スプリント- athlete_penguin_sprint_qrcode

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.