Xcode 不在函数错误中时的实例帧类型
我正在制作一个游戏,其中对象在地图上某个位置生成,我有多个用于不同对象的函数,需要一个引用,因此我将代码放在函数之外以扩大其范围,但现在我得到一个错误,即Xcode 不在函数错误中时的实例帧类型,xcode,swift,sprite-kit,Xcode,Swift,Sprite Kit,我正在制作一个游戏,其中对象在地图上某个位置生成,我有多个用于不同对象的函数,需要一个引用,因此我将代码放在函数之外以扩大其范围,但现在我得到一个错误,即 Instance type 'frame' cannot be used on type 'Levelunit' 如果我把它放回函数中,它是完全好的,但是当我把它放回函数外时,它似乎有问题。这是我的密码: let yAxisSpawnLocations: [CGFloat] = [0] let xAxisSpawnLocations: [C
Instance type 'frame' cannot be used on type 'Levelunit'
如果我把它放回函数中,它是完全好的,但是当我把它放回函数外时,它似乎有问题。这是我的密码:
let yAxisSpawnLocations: [CGFloat] = [0]
let xAxisSpawnLocations: [CGFloat] = {
var spawnLocations:[CGFloat] = [] //Create 5 possible spawn locations
let numberOfNodes = 5
for i in 0...numberOfNodes - 1 {
var xPosition = (frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)
xPosition += thePlayer.size.width/2
xPosition -= frame.maxX/1.6
spawnLocations.append( xPosition )
}
return spawnLocations
}()
我查了一下,不太明白给出的答案。有人能告诉我我做错了什么吗
顺便说一句,LevelUnit是我的类的名称。在
LevelUnit
完全初始化之前,您正在尝试使用self
。例如,这是一个隐式使用self
的地方:
var xPosition = (frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)
这与:
var xPosition = (self.frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)
因此,您可以在Levelunit
初始值设定项处初始化此属性(如果您不想与自动初始值设定项继承规则发生冲突,我将跳过此操作),或者在didMoveToView
中初始化它,这将很好地工作。如果我没有错的话,Levelunit
可能是SKScene的子类,对吗?如果是这样,就这样做:
//Define a property of Levelunit like this
var xAxisSpawnLocations:[CGFloat] = []
然后在didMoveToView
中初始化它:
let numberOfNodes = 5
for i in 0...numberOfNodes - 1 {
var xPosition = (self.frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)
xPosition += thePlayer.size.width/2
xPosition -= frame.maxX/1.6
xAxisSpawnLocations.append( xPosition )
}
如果您提供有关Levelunit类的更多信息,我可以对重写其初始值设定项并在此处初始化
xSpawningLocation
属性是否是一个好主意进行更多评论。我猜这是一个SKScene
的子类,您可以使用名为便利初始化器的文件初始化它,对吗?但无论如何,看看我的答案。我想知道你是否能帮我解决这个问题?