所以我一直在使用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
}
非常感谢任何帮助!
答案 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
}}