SpriteKitを使用したコードで、以下の様なオブジェクトのプールのようなものを作っています。mover を pool.createMover() によって創りだした場合、実行してもmoverが表示されません。しかし、コメントアウトしている部分を外して、poolを介してでなく直接作りだした場合、表示されました。何故このような違いが生じるのか分かりません。
parentScene, skScene は、デバッグ時、同じ SKScene * のアドレスを保持していることが確認できています。ご教示願います。
Swift
1class MyView: SKView { 2 private var skScene: SKScene! // 各スプライトが描画されるシーン 3... 4 // ここからはじまる 5 func initialize() { 6 7 skScene = SKScene(size: self.bounds.size) 8 self.presentScene(skScene) 9 ... 10 pool = Pool(parentScene: skScene) 11 12 var mover: Mover! // プールに登録するオブジェクト 13 mover = pool.createMover() 14 /* 15 mover.node = SKShapeNode(ellipseOfSize: CGSizeMake(10, 10)) 16 mover.node.fillColor = UIColor.redColor() 17 mover.node.runAction(SKAction.repeatActionForever(...), withKey: "blink") 18 mover.node.position = self.center 19 skScene.addChild(mover.node) 20 */ 21 ... 22 } 23} 24 25class Pool : NSObject { 26 private var pool = [Mover?]() 27 private let parentScene: SKScene 28 ... 29 init(parentScene: SKScene) { 30 self.parentScene = parentScene 31 super.init() 32 } 33 ... 34 35 // 新しいオブジェクトMoverをpool配列からを取得 or pool配列に生成 36 private func getNewMoverInstance() -> Mover? { 37 for var i=0; i<pool.count; i++ { 38 if(pool[i] == nil) { 39 pool[i] = Mover(parentScene: parentScene) 40 return pool[i] 41 } 42 } 43 pool.append(Mover(parentScene: parentScene)) 44 return pool.last! 45 } 46 47 // オブジェクトMover作成と、nodeをシーン追加する 48 func createMover() -> Mover? { 49 let newInstance = getNewMoverInstance() 50 newInstance!.setNode() 51 parentScene.addChild(newInstance!.node) 52 return newInstance 53 } 54} 55 56// 描画されるSKNodeと、描画先のSKSceneなどを備えたオブジェクトMoverの定義 57class Mover { 58 var node: SKShapeNode 59 let parentScene: SKScene 60 ... 61 init(parentScene: SKScene) { 62 self.node = SKShapeNode() 63 self.parentScene = parentScene 64 } 65 ... 66 // オブジェクトのnodeの設定 67 func setNode() { 68 self.node = SKShapeNode(ellipseOfSize: ...) 69 self.node.fillColor = UIColor.redColor() 70 self.node.runAction(SKAction.repeatActionForever(...), withKey: "blink") 71 self.node.position = CGPointMake(...) 72 } 73}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。