如何从另一个函数(碰撞)中调用我在函数(hello)中创建的sun对象?
func collide() {
if (CGRectIntersectsRect(player.frame, **sun.frame**)) {
[EndGame];
}
func hello() {
let sun = SKSpriteNode(imageNamed: "Sun")
}
答案 0 :(得分:4)
你不能 - sun
变量是hello
函数的本地变量,并且它不存在于其范围之外。
如果从collide
调用hello
,您只需将其作为参数传递:
func collide(sun: SKSpriteNode) {
if (CGRectIntersectsRect(player.frame, sun.frame)) {
[EndGame];
}
}
func hello() {
let sun = SKSpriteNode(imageNamed: "Sun")
...
collide(sun)
}
否则,如果我认为这些是类的实例方法,只需将sun
变量转换为实例属性:
class Test {
private var sun: SKSpriteNode?
func collide(sun: SKSpriteNode) {
if let sun = self.sun {
if (CGRectIntersectsRect(player.frame, sun.frame)) {
[EndGame];
}
}
}
func hello() {
self.sun = SKSpriteNode(imageNamed: "Sun")
}
}
答案 1 :(得分:1)
除了安东尼奥的答案,您还可以使用唯一名称搜索SKNode's children
。
例如。
let sun = SKSpriteNode(imageNamed:"Sun")
sun.name = "sun"
self.addChild(sun)
你可以通过
取回它if let sun = self.childNodeWithName("sun")
{
//use sun here
}
childNodeWithName
会返回一个可选的SKNode?
。