2017-04-13 70 views
0

我正在嘗試創建類似於Reactable的應用程序。AudioKit中對象的動態命名(SpriteKit)

用戶可以將「模塊」(如振盪器或濾波器)從菜單拖入「播放區域」,模塊將被激活。

我正在考慮初始化模塊,因爲它們與「play area」背景對象相交。然而,這需要我自動命名模塊,即:

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

不爲陣列或收集工作嗎? – Valdmer

+0

我正在嘗試一個基於這個[線程]的數組(http://stackoverflow.com/questions/27716931/create-a-variable-in-swift-with-dynamic-name)。 但是,我遇到麻煩,用數組更改AKOscillator函數的參數,如 'osci.frequency = 440'等 –

+0

什麼類型的麻煩?你不介意通過添加一些代碼來更新你的問題,你得到的錯誤,並解釋爲什麼陣列不適合你? – Valdmer

回答

0

我還沒有使用AudioKit,但前段時間我讀過它,我對它有很大的興趣。從我從文檔中瞭解的情況來看,它的結構非常類似於SpriteKit:連接在一起的節點。

我想那時庫中的大多數類都是從基類派生的,就像SpriteKit中的所有東西派生自SKNode類一樣。

由於您通過SpriteKit節點將音頻工具包節點與可視化表示鏈接在一起,爲什麼不直接從SKSpriteNode繼承子類,並使用AudioKit的基類添加可選的audioNode屬性?

這樣你就可以使用SpriteKit直接與存儲的音頻節點屬性進行交互。

+0

我想了解你的建議,你是否建議我創建一個基於AudioKit節點的SKSpriteNode的子類?即'類SKSpriteNode:AKOscillator {}'或類似的東西?我對於快速編程和新編程一般都很陌生,所以我仍然感到困惑。 如何從原始內置類訪問SKSpriteNode屬性? –

0

我想你的問題中有很多AudioKit相關的代碼,但要回答這個問題,你只需要看看oscCounter。你不顯示它的初始值,但我猜測它是零。然後將它加1並嘗試訪問只有一個元素的osciArray [oscCounter],以便通過osciArray [0]訪問它。把櫃檯移下來,你會過得更好。此外,你的振盪器看起來像局部變量,所以一旦範圍丟失,它們就會丟失。它們應該在你的類中聲明爲實例變量或者這是其中的一部分。