SpriteKit 10 Get all of the specific name of a node in the parent node

Swift3.0 GameScene.swift // // GameScene.swift // SpriteKit010 // // Created by Misato Morino on 2016/09/20. // Copyright © 2016年 Misato Morino. All rights reserved. // import SpriteKit extension SKNode{ /* 文字列から親ノードの中に入っている子ノードを探して配列に入れて配列で返すメソッド. */ func findNodesWithName(NodeName : String)->[SKNode]!{ var Nodes : [SKNode] Nodes = [SKNode]() for Node : AnyObject in self.children{ if (Node as! SKNode).name == nil { print("name is nil") return nil } else{ if Node.name == NodeName{ Nodes.append(Node as! SKNode) } } } return Nodes } } extension SKScene{ /* 指定された乱数の範囲を返すメソッド. */ func getRandomNumber(Min _Min : Int, Max _Max : Int)->Int { return Int(arc4random_uniform(UInt32(_Max))) + _Min } /* SceneのRectの範囲でランダムな座標を返すメソッド. */ func RandomPosition() -> CGPoint{ let maxX = self.frame.maxX let maxY = self.frame.maxY let x = getRandomNumber(Min: 0, Max: Int(maxX)) let y = getRandomNumber(Min: 0, Max: Int(maxY)) return CGPoint(x: CGFloat(x), y: CGFloat(y)) } /* Sceneの中央値を返すメソッド. */ func GetMid()->CGPoint{ return CGPoint(x: self.frame.midX, y: self.frame.midY) } } class GameScene: SKScene{ override func didMove(to view: SKView) { // シーンの剛体を作る. self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame) for i in 0..<150 { // 円の形を作る. let circle = SKShapeNode(circleOfRadius: 15.0) // 円の剛体を作る. circle.physicsBody = SKPhysicsBody(circleOfRadius: 15.0) circle.position = self.RandomPosition() // 偶数なら. if i % 2 == 0{ // 名前をつける. circle.name = "Even" // 色を赤色で満たす. circle.fillColor = UIColor.red } // 奇数なら. else{ // 名前をつける. circle.name = "UnEven" // 色を青色で満たす. circle.fillColor = UIColor.blue } self.addChild(circle) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { // シーン内に入っている名前が"Even"のNodeを全て得る. let nodes = self.findNodesWithName(NodeName: "Even") // nodeを全て削除. self.removeChildren(in: nodes!) } } Swift 2.3 GameScene.swift // // GameScene.swift // SpriteKit010 // // Created by Misato Morino on 2016/09/20. // Copyright © 2016年 Misato Morino. All rights reserved. // import SpriteKit extension SKNode{ /* 文字列から親ノードの中に入っている子ノードを探して配列に入れて配列で返すメソッド. */ func findNodesWithName(NodeName : String)->[SKNode]!{ var Nodes : [SKNode] Nodes = [SKNode]() for Node : AnyObject in self.children{ if (Node as! SKNode).name == nil { print("name is nil") return nil } else{ if Node.name == NodeName{ Nodes.append(Node as! SKNode) } } } return Nodes } } extension SKScene{ /* 指定された乱数の範囲を返すメソッド. */ func getRandomNumber(Min _Min : Int, Max _Max : Int)->Int { return Int(arc4random_uniform(UInt32(_Max))) + _Min } /* SceneのRectの範囲でランダムな座標を返すメソッド. */ func RandomPosition() -> CGPoint{ let maxX = self.frame.maxX let maxY = self.frame.maxY let x = getRandomNumber(Min: 0, Max: Int(maxX)) let y = getRandomNumber(Min: 0, Max: Int(maxY)) return CGPointMake(CGFloat(x),CGFloat(y)) } /* Sceneの中央値を返すメソッド. */ func GetMid()->CGPoint{ return CGPointMake(self.frame.midX, self.frame.midY) } } class GameScene: SKScene{ override func didMoveToView(view: SKView) { // シーンの剛体を作る. self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) for i in 0..<150 { // 円の形を作る. let circle = SKShapeNode(circleOfRadius: 15.0) // 円の剛体を作る. circle.physicsBody = SKPhysicsBody(circleOfRadius: 15.0) circle.position = self.RandomPosition() // 偶数なら. if i % 2 == 0{ // 名前をつける. circle.name = "Even" // 色を赤色で満たす. circle.fillColor = UIColor.redColor() } // 奇数なら. else{ // 名前をつける. circle.name = "UnEven" // 色を青色で満たす. circle.fillColor = UIColor.blueColor() } self.addChild(circle) } } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { // シーン内に入っている名前が"Even"のNodeを全て得る. let nodes = self.findNodesWithName("Even") // nodeを全て削除. self.removeChildrenInArray(nodes) } } 2.3と3.0の差分 didMoveToView(view: SKView) から didMove(to view: SKView) に変更

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.