私は現在、複雑なライトのインストールを制御するのに役立つプログラムを書いています。プログラムにプリセットを開始するように指示すると、アプリには 3 つのオプションがあります (プリセットの種類によって異なります)。
1) ライトは 1 つの位置に移動します (したがって、プリセットの開始時に送信されるデータのグループは 1 つだけです) 2) ライトは数式に従います (例: 滑らかな円を作るためのタイマー付き正弦波) 3) ライトは次の流れに応答しますデータ (ex midi コントローラー)
そこで、私が AppBrain と呼ぶオブジェクトを使用することにしました。このオブジェクトは、コントローラーとテンプレートからデータを受け取り、処理されたデータをライトに送信することもできます。
現在、私は非ネイティブ プログラミングの出身であり、多くの処理、イベント、およびタイミングを操作することに関して、信頼の問題を抱えています。Cocoa のロジックを 100% 理解することに関するトラブルも同様です。
これが実際の質問の始まりです、申し訳ありません
私がやりたいことは、プリセットをロードするときに、それを解析してタイマー/データ受信イベントを準備することです。これにより、100 個のライトのすべてのオプションを毎秒 100 回通過する必要がなくなります。
もっと深く説明するために、Javascriptでそれを行う方法は次のとおりです(もちろん、くだらない擬似コードです)
var lightsFunctions = {};
function prepareTemplate(theTemplate){
//Let's assume here the template is just an array, and I won't show all the processing
switch(theTemplate.typeOfTemplate){
case "simpledata":
sendAllDataTooLights(); // Simple here
break;
case "periodic":
for(light in theTemplate.lights){
switch(light.typeOfEquation){
case "sin":
lightsFunctions[light.id] = doTheSinus; // doTheSinus being an existing function
break;
case "cos":
...
}
}
function onFrame(){
for(light in lightsFunctions){
lightsFunctions[light]();
}
}
var theTimer = setTimeout(onFrame, theTemplate.delay);
break;
case "controller":
//do the same pre-processing without the timer, to know which function to execute for which light
break;
}
}
}
したがって、私の考えは、必要な処理関数を NSArray に格納することです。そのため、各フレームでタイプをテストして、時間/CPU を失う必要はありません。
自分が明確かどうか、または自分のアイデアが可能かどうか、または良い方法かどうかはわかりません。私は主にアルゴリズムのアイデアを探しています。良い方向に導くコードがあれば... (PerformSelector については知っていますが、この状況に最適かどうかはわかりません。
ありがとう;
私_