我正在尝试创建一个类似于Reactable的应用。
用户可以拖动"模块"像一个振荡器或过滤器从菜单进入游戏区域"并且模块将被激活。
我正在考虑将模块初始化为与"游戏区域相交的#34;背景对象。但是,这要求我自动命名模块,即:
let osci = AKOscillator()
其中osci将自动计数:
let osci1 = AKOscillator()
let osci2 = AKOscillator()
...
等
我将如何做到这一点?
由于
编辑:我试图通过创建
数组来使用数组var osciArray = [AKOscillator]()
在我添加振荡器的功能中,这是我的代码:
let oscis = AKOscillator()
osciArray.append(oscis)
osciArray[oscCounter].frequency = freqValue
osciArray[oscCounter].amplitude = 0.5
osciArray[oscCounter].start()
selectedNode.userData = ["counter": oscCounter]
oscCounter += 1
currentOutput = osciArray[oscCounter]
AudioKit.output = currentOutput
AudioKit.start()
我的应用程序构建正常,但一旦应用程序开始在模拟器上运行,我收到错误:致命错误:索引超出范围
答案 0 :(得分:0)
我没有使用过AudioKit,但是我刚才读过它,我对此非常感兴趣。根据我从文档中理解的内容,它的结构非常类似于SpriteKit:连接在一起的节点。
我想那时库中的大多数类派生自基类,就像SpriteKit中的所有类都派生自SKNode类一样。
由于您通过SpriteKit节点链接音频套件节点和可视化表示,为什么不简单地从SKSpriteNode子类化并使用AudioKit的基类添加可选的audioNode属性?
这样你就可以使用SpriteKit直接与存储的音频节点属性进行交互。
答案 1 :(得分:0)
我认为你的问题中有很多与AudioKit相关的代码,但要回答这个问题,你只需要看一下oscCounter。你没有显示它的初始值,但我猜它是零。然后将其递增1并尝试访问只有一个元素的osciArray [oscCounter],因此应该由osciArray [0]访问。将计数器向下移动,你会变得更好。此外,您的振荡器看起来像局部变量,因此一旦范围丢失,它们就会丢失。它们应该在您的类中声明为实例变量,或者它是其中的一部分。