今日やったこと(H27.12.24)
X'masイブの夜、サンタクロースは大忙しでしょうね^^
皆様にも素敵なX'masでありますように!
犬にもサンタ服を着せてみました(^^)/
<アプリ作成>
昨日作ったプログラムに、ちょっと飾りをつけてみました。
X'masツリーをSketchで描き、てっぺんの星に昨日の星を...
さらに、やってみたかったパーティクルd(´▽`)b
パーティクル、すごいですね!
思わず色々やってみてしまいました。
まだ色々ありました!
アプリ道場のアドベントカレンダーで、パーティクルの記事を書いていらした方がいらっしゃいました。
そちらも参考にさせていただきましたm(__)m
で、できたのがこちら。
パーティクルのsnowを使って、雪を降らせてみました。
ここでちょっと困ったのは、Nodeの描画順です。
多分、後に書いたものほど手前にくるだろうなと思ったのですが、クリックで再度星をaddChildしているせいもあってか、期待通りの順番になってくれません。
こちらの記事を参考にして、順番を決めることができました。
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が小さいものほど最初に描画されます。
ツリー、星、雪の順に設定し、希望通りの描画ができました^^