在其他函数中访问局部定义的变量 - Swift

时间:2015-07-23 20:22:27

标签: swift function sprite-kit skspritenode local-variables

我正在制作一种类似太空侵略者的游戏。 我有一个函数可以随机position.x创建入侵者。

addInvader()内,我将攻击者定义为SKSpriteNode(imageNamed: "someImage")

这必须在函数内部定义,因为每秒都会添加一个新的attacker

我的问题出在另一个功能中:

override func update(currentTime: NSTimeInterval) {
    if attacker.position.y < CGFloat(size.height/5*2)
        attacker.texture = SKTexture(imageNamed: "someOtherImage")
    }
}

由于attacker常量是本地的,update(currentTime: NSTimeInterval)函数无法访问它。

如何访问更新功能中的attacker.position

2 个答案:

答案 0 :(得分:0)

  

您无法访问在方法中私下定义的变量。

但你能做的就是这个......

在您的addInvader()方法中,在此

下方
var attacker = SKSpriteNode(imageNamed: "someImage")

您需要添加以下代码

attacker.name = "attacker" 

您可以将attacker.name设置为您想要的String

设置此项将允许我们在SKScene中找到节点并使用它

现在,一旦我们有了这个集合,我们就可以继续使用update(currentTime: NSTimeInterval)方法了。在update(currentTime: NSTimeInterval)内,只需在其他任何内容之前添加此行代码

let attacker =  self.childNodeWithName("attacker") as! SKSpriteNode

它的作用是遍历SKScene中的所有子项,并查找名为attacker的名称或您设置的名称。如果attacker节点不是SKScene的子节点并且是另一个变量的子节点,例如attackerParent,那么您可以做的就是

let attcker = attackerParent.childNodeWithName("attacker") as! SKSpriteNode

所以现在你的更新功能看起来像这样

let attacker = self.childNodeWithName("attacker") as! SKSpriteNode

if attacker.position.y < CGFloat(size.height/5*2) {

    attacker.texture = SKTexture(imageNamed: "someOtherImage")

}

同样快速提示,如果您想更改SKSpriteNode的纹理,请执行此操作

var texture = SKTexture(imageNamed : "someOtherImage")
attacker.texture = texture

答案 1 :(得分:0)

我创建了一个名为attackers的全局数组。 然后我只是将每个攻击者添加到数组中。

通过algorythm,我确保update函数能够跟踪正确的攻击者。

相关问题