【问题标题】:Dynamic naming of objects in AudioKit (SpriteKit)AudioKit(SpriteKit)中对象的动态命名
【发布时间】:2017-09-09 21:50:25
【问题描述】:

我正在尝试创建一个类似于 Reactable 的应用程序。

用户将能够将“模块”(如振荡器或过滤器)从菜单拖到“播放区”中,并且模块将被激活。

我正在考虑在模块与“游戏区”背景对象相交时对其进行初始化。但是,这需要我自动命名模块,即:

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()

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

【问题讨论】:

  • 数组或集合不适合你吗?
  • 我正在尝试基于此thread 的数组。但是,我无法使用数组更改 AKOscillator 函数的参数,例如 osci.frequency = 440
  • 什么类型的麻烦?您不介意通过添加一些代码、遇到的错误并解释为什么数组不适合您来更新您的问题吗?
  • 我已经编辑了我的原始帖子以显示我的代码。谢谢
  • Index out of range 与 AudioKit 无关。你使用了错误的oscCounter。我不确定为什么在添加元素并尝试访问下一个元素(很可能超出范围)之后要增加它。

标签: ios xcode swift3 sprite-kit audiokit


【解决方案1】:

我没有使用过 AudioKit,但我不久前读到过它,我对它非常感兴趣。根据我从文档中了解到的情况,它的结构非常类似于 SpriteKit:节点连接在一起。

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

既然您通过 SpriteKit 节点将音频工具包节点与视觉表示联系起来,为什么不简单地从 SKSpriteNode 子类化并使用 AudioKit 的基类添加一个可选的 audioNode 属性?

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

【讨论】:

  • 我想了解您的建议,您是否建议我创建一个基于 AudioKit 节点的 SKSpriteNode 子类? IE。 class SKSpriteNode: AKOscillator { } 或类似的东西?我是 swift 和一般编程的新手,所以我仍然很困惑。如何从原始内置类访问 SKSpriteNode 属性?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2019-02-26
    相关资源
    最近更新 更多