2015-11-08 24 views
2

我想開發一個遊戲,需要使用SpriteKit和Swift在所有場景中具有共同背景。由於背景是常見的,它的行動必須是連續的,我創建的SKSpriteNode這樣一個自定義的單子類:自定義SKSpriteNode addChild不工作

class BackgroundNode: SKSpriteNode { 
    static let sharedBackground = BackgroundNode() 

    private init() 
    { 
     let texture = SKTexture(imageNamed: "Background") 
     super.init(texture: texture, color: UIColor.clearColor(), size: texture.size()) 
     addActors() 
    } 

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

    private func addActors() { 
     addClouds() 
    } 

    private func addClouds() { 
     addCloud1() 
    } 

    private func addCloud1() { 
     let cloud1 = SKSpriteNode(imageNamed: "Cloud1") 
     cloud1.size = CGSizeMake(0.41953125*self.size.width, 0.225*self.size.height) 
     cloud1.position = CGPointMake(-self.size.width/2, 0.7*self.size.height) 
     self.addChild(cloud1) 
     let moveAction = SKAction.moveTo(CGPointMake(self.size.width/2, 0.7*self.size.height), duration: 20) 
     cloud1.runAction(SKAction.repeatActionForever(moveAction)) 
    } 
} 

而且從GameScene類我加入這個節點這樣當前視圖:

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     BackgroundNode.sharedBackground.size = CGSizeMake(self.size.width, self.size.height) 
     BackgroundNode.sharedBackground.position = CGPointMake(self.size.width/2, self.size.height/2) 
     addChild(BackgroundNode.sharedBackground) 
    } 
} 

背景圖像顯示正確,但未添加雲。截至上面的代碼雲應該出現在屏幕之外,然後再通過另一邊緣進入屏幕,但爲了驗證它是否被添加,我甚至嘗試將雲添加到屏幕的中心,而沒有任何動畫。雲仍沒有出現。這裏可能是什麼問題?以及如何解決它?

編輯

我想通了,孩子卻越來越增加,但獲取添加,並通過一些遠點屏幕上方移動。我還發現,它可能與雲的錨點有關,但無論我設置哪個值作爲錨點,雲總是保留在屏幕的右上角。我可以做些什麼關於錨點,使雲顯示,因爲它應該(考慮左下角爲(0,0)是我想要的)

回答

1

解決了這個問題。問題是我不得不手動設置場景和節點的錨點。將Scene和節點的定位點設置爲(0,0)解決了問題。新代碼如下:

GameScene

override func didMoveToView(view: SKView) { 
    anchorPoint = CGPointMake(0, 0) //Added this 
    BackgroundNode.sharedBackground.size = CGSizeMake(self.size.width, self.size.height) 
    BackgroundNode.sharedBackground.position = CGPointMake(0, 0) 
    addChild(BackgroundNode.sharedBackground) 
} 

BackgroundNode

private init() 
{ 
    let texture = SKTexture(imageNamed: "Background") 
    super.init(texture: texture, color: UIColor.clearColor(), size: texture.size()) 
    anchorPoint = CGPointMake(0, 0) //Added this 
    addActors() 
} 
+0

也許你應該標記您的答案解決了嗎? – Stefan

+0

需要一點時間才能將自己的答案標記爲已解決。 :-) –