在swift

时间:2015-07-22 19:38:40

标签: ios swift sprite-kit

所以我一直在使用SpriteKit在swift中编写游戏,并且我无法理解swift中如何处理变量。我试图在稍后出现的touchesBegan函数中再次更新我在GameScene类开头声明的变量。但是,我遇到的问题是变量永远不会更新(我知道这是因为在didMoveToView函数中,变量用于指示节点的旋转,并且当它应该在touchesBegan中更新时函数,它永远不会改变节点的旋转。)

在我看来,我可能只是对变量在Swift中的变化有一个根本的误解。我想知道是否有办法更新类文件中早期声明的变量?

我正在做一些有意义的事情吗?有谁知道如何解决我的情况?我的代码很长,发布所有内容都没有意义,所以这里有重要的部分:

这是我宣布'旋转'变量I我试图更新并稍后使用。

class GameScene: SKScene {
    let rotation: Int = 188400

这是“旋转”的地方。变量在didMoveToView函数中使用:

let rotate = SKAction.rotateToAngle(CGFloat(-188400), duration: NSTimeInterval(60000))
anchorNode.runAction(rotate)

这是我尝试更新'旋转' touchesBegan函数中的变量:

 override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    /* Called when a touch begins */

    if rotation == 188400 {

        println("Setting rotation backwards")

        let rotation = -188400

    }else{

        println("Setting rotation forwards")
        let rotation = 188400
    }

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

问题在于,当你说

    let rotation = -188400

您创建不同的 rotation变量并设置其值。您没有设置实例变量(属性)rotation。要,请省略let

    rotation = -188400

我个人喜欢做的是在引用我的实例变量时写self。所以我写这样的代码:

if self.rotation == 188400 {
    println("Setting rotation backwards")
    self.rotation = -188400
}

等等。不需要self的使用,但对我来说,它确实澄清了这个变量的来源 - 看起来这样澄清正是你需要的!

此外,正如@danielbeard所指出的那样,除非您使用self.rotation声明var,而不是{{1},否则您无法更新let }}