2014-10-04 62 views
0

好的。這段代碼讓我瘋狂。它只是不起作用。我收到的唯一消息是「試圖添加一個已經有父母的SKNode」。是的,我知道這裏已經有過一些討論,但是他們都沒有提供我需要的解決方案。試圖添加一個已經有父母的SKNode - Swift

這是代碼。我非常感謝任何幫助。

import SpriteKit 

class MyScene: SKScene { 

    let intervalShapeCreation:NSTimeInterval = 2.0 // Interval for creating the next Shape 
    let gravitationalAcceleration:CGFloat = -0.5 // The gravitational Y acceleration 

    let shapeSequenceAction = SKAction.sequence([ 
    SKAction.scaleTo(1.0, duration: 0.5), 
    SKAction.waitForDuration(2.0), 
    SKAction.scaleTo(0, duration: 0.5), 
    SKAction.removeFromParent() 
    ]) 

    override init(size: CGSize) { 
    super.init(size: size) 
    } 

    required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    } 

    override func didMoveToView(view: SKView) { 
    super.didMoveToView(view) 
    addBackground() 
    initializeScene() 
    } 

    // MARK: Level Building 
    func initializeScene() { 
    self.physicsWorld.gravity = CGVectorMake(0.0, gravitationalAcceleration) 
    runAction(SKAction.repeatActionForever(
     SKAction.sequence([SKAction.runBlock(self.createShape), 
     SKAction.waitForDuration(intervalShapeCreation)]))) 
    } 

    func addBackground() { 
    let backgroundAtlas = SKTextureAtlas(named: "background") 
    let background = SKSpriteNode(texture: backgroundAtlas.textureNamed("background")) 
    background.position = CGPoint(x: size.width/2, y: size.height/2) 
    background.anchorPoint = CGPointMake(0.5, 0.5) 
    background.zPosition = -1 
    background.name = "background" 
    self.addChild(background) 
    } 

    func createShape() { 
    let newShape = sSharedAllPossibleShapes[0] 
    print("\n shape creada: \(newShape.name)") 
    newShape.position = CGPointMake(size.width/2, CGFloat(Int.random(fromZeroToMax: 500))) 
    self.addChild(newShape) 
    newShape.runAction(shapeSequenceAction) 
    } 

} 
+0

你能解釋一下「不行」嗎?請嘗試闡明預期的行爲。 – tjameson 2014-10-04 00:36:11

+0

好的。它必須做的是在屏幕上以相同的x位置和隨機的y位置顯示一些圖形。這種形狀必須持續2秒,然後消失並移除。它可以創建第一個沒有問題,但其餘停止與「試圖添加一個已經有父母的SKNode」相同的不方便。 – 2014-10-04 00:49:57

回答

1

createShape實際上並不創建SKShapeNode。它從sSharedAllPossibleShapes數組獲得第一個形狀,然後將其作爲子代添加到自身。第二次調用此方法時,該形狀已具有父級,並且不能再次添加。

您必須創建SKShapeNode的新實例。我看到它的方式確實需要包含定義形狀的CGPath對象,而不是節點本身,因爲您無法按照您的意圖重用節點。

+0

好的。 sSharedAllPossibleShapes是一個包含遊戲中使用的所有可能形狀的數組。每個形狀都是SKSpriteNode的一個子類,我想要的是避免每次都創建相同的可能形狀,而是從數組中拉取它們。這不可能嗎?如果不是,你能向我推薦代碼嗎?我真的不明白你提到的CGPath是什麼。 – 2014-10-04 14:57:56

+0

然後,您需要使用相同的紋理創建多個形狀。精靈實例之間共享相同的紋理。 – LearnCocos2D 2014-10-04 16:37:40

相關問題