touchesBegan on local variable

时间:2015-07-01 21:18:05

标签: ios swift sprite-kit

我有一个每2秒重复调用一次的函数,每次从屏幕顶部带一个随机纹理的球。我希望能够在touchesBegan中使用这个球,但我不能,因为它是一个局部变量。我试过把它变成一个全局变量,但是这给了我一个错误,说我试图添加一个已经拥有父级的skspritenode。任何帮助,将不胜感激。这是我用来击球的代码。

override func didMoveToView(view: SKView) {

        var create = SKAction.runBlock({() in self.createTargets()})
        var wait = SKAction.waitForDuration(2)
        var waitAndCreateForever = SKAction.repeatActionForever(SKAction.sequence([create, wait]))
        self.runAction(waitAndCreateForever)
}

func createTargets() {

        let randomx = Int(arc4random_uniform(170) + 290)
        var ball = SKSpriteNode(imageNamed: "blueBlue")
        ball.zPosition = 0
        ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width / 11)
        ball.physicsBody?.dynamic = true
        ball.size = CGSize(width: ball.size.width / 1.5, height: ball.size.height / 1.5)
        let random = Int(arc4random_uniform(35))
        let textures = [texture1, texture2, texture3, texture4, texture5, texture6, texture7, texture8, texture9, texture10, texture11, texture12, texture13, texture14, texture15, texture16, texture17, texture18, texture19, texture20, texture21, texture22, texture23, texture24, texture25, texture1, texture7, texture18, texture24, texture25, texture1, texture7, texture18, texture24, texture25]
        ball.texture = textures[random]
        ball.position = CGPoint(x: randomx, y: 1400)
        addChild(ball)

}

1 个答案:

答案 0 :(得分:1)

局部变量(在函数中)太少了。 (一旦退出createTargets,变量就会被破坏。

全局变量可能太多了。显然,您正在尝试预先创建它。

- >使用类实例变量。

此外,在touchesBegan中,您可以检查被触摸的节点,并且 - 根据您打算做什么 - 可能无需任何变量。