AudioKit(SpriteKit)中对象的动态命名

时间:2017-04-13 17:01:18

标签: ios xcode swift3 sprite-kit audiokit

我正在尝试创建一个类似于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()

我的应用程序构建正常,但一旦应用程序开始在模拟器上运行,我收到错误:致命错误:索引超出范围

2 个答案:

答案 0 :(得分:0)

我没有使用过AudioKit,但是我刚才读过它,我对此非常感兴趣。根据我从文档中理解的内容,它的结构非常类似于SpriteKit:连接在一起的节点。

我想那时库中的大多数类派生自基类,就像SpriteKit中的所有类都派生自SKNode类一样。

由于您通过SpriteKit节点链接音频套件节点和可视化表示,为什么不简单地从SKSpriteNode子类化并使用AudioKit的基类添加可选的audioNode属性?

这样你就可以使用SpriteKit直接与存储的音频节点属性进行交互。

答案 1 :(得分:0)

我认为你的问题中有很多与AudioKit相关的代码,但要回答这个问题,你只需要看一下oscCounter。你没有显示它的初始值,但我猜它是零。然后将其递增1并尝试访问只有一个元素的osciArray [oscCounter],因此应该由osciArray [0]访问。将计数器向下移动,你会变得更好。此外,您的振荡器看起来像局部变量,因此一旦范围丢失,它们就会丢失。它们应该在您的类中声明为实例变量,或者它是其中的一部分。