質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1334閲覧

[SpriteKit]オブジェクトプールのようなものを作る

taratail

総合スコア76

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/08/03 08:44

編集2015/08/04 03:34

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

申し訳ありません、自己解決致しました。原因はこのコードにはありませんでした。ここには書かれていませんがnodeにphysicsBodyの設定がされていて、ノードがsceneの下まで落下していて表示されていないように見えていたことでした。node生成から出現までに時間差を入れていて、その間node.hidden=trueとしていたので、原因に中々気づきませんでした。ありがとうございました。

投稿2015/08/04 11:01

taratail

総合スコア76

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問