2016-03-05 62 views
2
更改背景图像分数

我正在开发一款使用Swift和SpriteKit的游戏。我希望背景以一定的分数改变。这里是代码:Swift SpriteKit基于

class GameScene: SKScene { 
var bg = SKSpriteNode() 

override func didMoveToView(view: SKView) { 

    makeBg() 
} 

func makeBg() { 

    let bgTexture = SKTexture(imageNamed: "img/bg.png") 
    let moveBg = SKAction.moveByX(-bgTexture.size().width, y: 0, duration: 9) 
    let replaceBg = SKAction.moveByX(bgTexture.size().width, y: 0, duration:0) 
    let animateBg = SKAction.repeatActionForever(SKAction.sequence([moveBg, replaceBg])) 


    for var i: CGFloat = 0; i<3; i++ { 
     let bg = SKSpriteNode(texture: bgTexture) 
     bg.name = "background" 
     bg.position = CGPoint(x: bgTexture.size().width/2 + bgTexture.size().width * i, y: CGRectGetMidY(self.frame)) 
     bg.size.height = self.frame.height 
     bg.runAction(animateBg) 
     addChild(bg) 
    } 
}  
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if score == 0 { 
       bg.texture = SKTexture(imageNamed: "img/bg.png") 
      } else if score == 3 { 
       bg.texture = SKTexture(imageNamed: "img/bgOri.png") 
       } 
} 

但图像不会改变...哪里是错误?

+1

您是否检查过该if/else块内的代码是否实际执行?另外,你在你的touchesBegan中使用'bgTexture'和'bg.texture' ...看起来很可疑... – Whirlwind

+0

是的代码被执行了......问题是我在场景运行时无法更改背景图像。 ..请帮帮我。我只能改变背景图像,如果我完全改变了我的代码......在gamescene中声明var bg = SKSpriteNode(imageNamed:“img/bg.png”)...但是没有滚动就让背景静止。 – Swift1

+1

好的,这是一个开始。让我试着重现这个问题......你有没有在任何时候看到MissingResource图像(白色方框中带有红色的X)? – Whirlwind

回答

2

因此,这是如何在你里面创造了循环中的所有节点上改变纹理:

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     makeBg() 
    } 

    func makeBg() { 
     let bgTexture = SKTexture(imageNamed: "img/bg.png") 
     let moveBg = SKAction.moveByX(-bgTexture.size().width, y: 0, duration: 9) 
     let replaceBg = SKAction.moveByX(bgTexture.size().width, y: 0, duration:0) 
     let animateBg = SKAction.repeatActionForever(SKAction.sequence([moveBg, replaceBg])) 

     for var i: CGFloat = 0; i<3; i++ { 
      let bg = SKSpriteNode(texture: bgTexture) 
      bg.name = "background" 
      bg.position = CGPoint(x: bgTexture.size().width/2 + bgTexture.size().width * i, y: CGRectGetMidY(self.frame)) 
      bg.size.height = self.frame.height 
      bg.runAction(animateBg) 

      addChild(bg) 
     } 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     enumerateChildNodesWithName("background", usingBlock: { node, stop in 
      //Make a check based on score and 
      (node as? SKSpriteNode)?.texture = //set the right texture 
     }) 
    } 
} 

请注意,您不需要在GameScene定义BG属性来实现这一点。

+0

完美无缺!我非常感谢你为我做了什么。非常感谢 – Swift1