gpt4 book ai didi

swift - 访问其他函数中本地定义的变量 - Swift

转载 作者:行者123 更新时间:2023-11-30 14:12:36 24 4
gpt4 key购买 nike

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

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

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

我的问题出在另一个函数内部:

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

最佳答案

There is no way you can access a variable that was defined privately in a method.

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

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

var attacker = SKSpriteNode(imageNamed: "someImage")

您需要添加以下代码

attacker.name = "attacker" 

您可以将attacker.name 设置为任何您想要的字符串

设置此项将允许我们在 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

关于swift - 访问其他函数中本地定义的变量 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31597328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com