Class 中发布的变量在数组中不可用作为方法
Published var in Class not available in array as a method
我正在创建一个 SpriteNodes 数组,每个 SpriteNodes 都有另一个绑定变量的实例,它实际上是使用 AudioKit 构建的合成器代码的实例,所以...
var ballArray: [SKShapeNode] = []
var numberOfBalls = -1
class DroneBall: SKShapeNode, ObservableObject {
@Published var conductor = DynamicOscillatorConductor()
override init() {
super.init()
}
convenience init(width: CGFloat, point: CGPoint) {
self.init()
self.init(circleOfRadius: width/2)
fillColor = .red
strokeColor = .yellow
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我在 SpriteKit 场景中的一个函数中创建了这个 class 的每个实例,并将 ShapeNode 添加到场景中。
func buildABall(location: CGPoint) {
let ball = DroneBall(width: 100, point: location)
ball.conductor.data.frequency = AUValue((location.x * 10))
ball.conductor.data.isPlaying = true
ball.conductor.start()
ballArray.append(ball)
numberOfBalls += 1
ballArray[numberOfBalls].position = location
addChild(ballArray[numberOfBalls])
}
代码正确地创建了 SpriteNode,并将使用 Synth 运行 将每个 Sprite 添加到场景中。但是我无法访问数组上合成器的方法,例如
ballArray[numberOfBalls].conductor.data.frequency = 400
我收到错误:'SKShapeNode' 类型的值没有成员 'conductor'
所以如果它在被添加到数组之前存在于 SpriteNode 中,为什么它不也在数组中?我需要能够在代码的其他地方访问 'conductor' 的值,以便我可以更改其中的变量。
数组是否也必须是某种方式的可观察对象?
声明您放置在其中的对象数组,例如
var ballArray: [DroneBall] = []
我正在创建一个 SpriteNodes 数组,每个 SpriteNodes 都有另一个绑定变量的实例,它实际上是使用 AudioKit 构建的合成器代码的实例,所以...
var ballArray: [SKShapeNode] = []
var numberOfBalls = -1
class DroneBall: SKShapeNode, ObservableObject {
@Published var conductor = DynamicOscillatorConductor()
override init() {
super.init()
}
convenience init(width: CGFloat, point: CGPoint) {
self.init()
self.init(circleOfRadius: width/2)
fillColor = .red
strokeColor = .yellow
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我在 SpriteKit 场景中的一个函数中创建了这个 class 的每个实例,并将 ShapeNode 添加到场景中。
func buildABall(location: CGPoint) {
let ball = DroneBall(width: 100, point: location)
ball.conductor.data.frequency = AUValue((location.x * 10))
ball.conductor.data.isPlaying = true
ball.conductor.start()
ballArray.append(ball)
numberOfBalls += 1
ballArray[numberOfBalls].position = location
addChild(ballArray[numberOfBalls])
}
代码正确地创建了 SpriteNode,并将使用 Synth 运行 将每个 Sprite 添加到场景中。但是我无法访问数组上合成器的方法,例如
ballArray[numberOfBalls].conductor.data.frequency = 400
我收到错误:'SKShapeNode' 类型的值没有成员 'conductor'
所以如果它在被添加到数组之前存在于 SpriteNode 中,为什么它不也在数组中?我需要能够在代码的其他地方访问 'conductor' 的值,以便我可以更改其中的变量。
数组是否也必须是某种方式的可观察对象?
声明您放置在其中的对象数组,例如
var ballArray: [DroneBall] = []