とりあえずブログ

プログラミングとiPhoneアプリの作り方を勉強中です。

今日やったこと(H27.12.24)

X'masイブの夜、サンタクロースは大忙しでしょうね^^
皆様にも素敵なX'masでありますように!

犬にもサンタ服を着せてみました(^^)/

f:id:onetoonewao:20151225044745p:plain



<アプリ作成>

昨日作ったプログラムに、ちょっと飾りをつけてみました。
X'masツリーをSketchで描き、てっぺんの星に昨日の星を...
さらに、やってみたかったパーティクルd(´▽`)b

パーティクル、すごいですね!
思わず色々やってみてしまいました。

こんなんとか

こんなんとか

こんなのも

まだ色々ありました!

アプリ道場アドベントカレンダーで、パーティクルの記事を書いていらした方がいらっしゃいました。
そちらも参考にさせていただきましたm(__)m

qiita.com

で、できたのがこちら。
パーティクルのsnowを使って、雪を降らせてみました。

ここでちょっと困ったのは、Nodeの描画順です。
多分、後に書いたものほど手前にくるだろうなと思ったのですが、クリックで再度星をaddChildしているせいもあってか、期待通りの順番になってくれません。
こちらの記事を参考にして、順番を決めることができました。

spritekit.jp

import SpriteKit

class GameScene: SKScene {
    
    var star = SKSpriteNode(imageNamed: "")
    var count = 0
    
    override func didMoveToView(view: SKView) {
        
        //背景色を設定
        self.backgroundColor = UIColor.blackColor()
        
        //X'masツリーを作成
        let tree = SKSpriteNode(imageNamed: "tree.png")
        tree.position = CGPoint(x:self.size.width/2, y:self.size.height/2.3)
        tree.setScale(1.5)
        tree.zPosition = 0
        self.addChild(tree)
        
        //星のオブジェクトを作成
        star.texture = SKTexture(imageNamed: "star1.png")
        star.position = CGPoint(x:self.size.width/2, y:self.size.height/1.2)
        star.zPosition = 1
        self.addChild(star)
        
        //星を回転させる
        let action1 = SKAction.rotateByAngle(CGFloat(-M_PI * 2), duration: 3.0)
        let action2 = SKAction.repeatActionForever(action1)
        star.runAction(action2)
        
        // パーティクルを設定
        if let snowEmitter = SKEmitterNode(fileNamed: "snow") {
            
            snowEmitter.position = CGPoint(x:self.size.width/2, y:self.size.height)
            
            // 階層を設定
            snowEmitter.zPosition = 2
            
            addChild(snowEmitter)
        }
    }
    
    //タッチで呼ばれる
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
       
        for touch in touches {
            
            //タッチされた座標を取得
            let location = touch.locationInNode(self)
            
            //タッチされた座標が、星のviewと重なったら
            if star.containsPoint(location){
                
                //カウントアップ
                count++
                print(count)
                
                star.removeFromParent()
                
                //カウント数と連動して画像を切り替える
                star.texture = SKTexture(imageNamed: "star\(count%3 + 1).png")
                star.position = CGPoint(x:self.size.width/2, y:self.size.height/1.2)
                //self.addChild(star)
                star.zPosition = 1
                self.addChild(star)
            }
        }
    }

zPositionが小さいものほど最初に描画されます。
ツリー、星、雪の順に設定し、希望通りの描画ができました^^