我正在制作一种类似太空侵略者的游戏。
我有一个函数可以随机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
?
答案 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
函数能够跟踪正确的攻击者。