我正在编写一个程序,帮助我控制复杂的灯光安装。我的想法是告诉程序启动一个预设值,然后应用程序有三个选项(取决于预设类型):
1. 灯光移到一个位置(因此当预设开始时只发送一组数据) 2. 灯光遵循数学方程(例如:正弦曲线并设置计时器以使圆形平滑过渡) 3. 灯光响应数据流(例如midi控制器)
因此,我决定使用一个被称为AppBrain的对象,它接收来自控制器和模板的数据,但也能够将处理过的数据发送到灯光。
现在,我来自非本地编程背景,对于处理、事件和时间方面有信任问题;以及理解Cocoa逻辑方面也存在困难。
这是实际问题的开始,抱歉。
我想要做的是,在加载预设值时,解析它以准备计时器/数据接收事件,以便不必每秒为100个灯光执行100次所有选项。
更深入地解释一下,在JavaScript中我会如何做(当然,这是糟糕的伪代码):
我的想法是将我需要的处理函数存储在NSArray中,这样我就不需要在每个帧上测试类型并浪费时间/CPU。我不知道自己表达清楚了没有,或者我的想法是否可行/可行。我主要是在寻找算法思路,如果您有一些可能指引我走向正确方向的代码...(我知道PerformSelector,但我不知道它是否适用于此情况。感谢;I_
1. 灯光移到一个位置(因此当预设开始时只发送一组数据) 2. 灯光遵循数学方程(例如:正弦曲线并设置计时器以使圆形平滑过渡) 3. 灯光响应数据流(例如midi控制器)
因此,我决定使用一个被称为AppBrain的对象,它接收来自控制器和模板的数据,但也能够将处理过的数据发送到灯光。
现在,我来自非本地编程背景,对于处理、事件和时间方面有信任问题;以及理解Cocoa逻辑方面也存在困难。
这是实际问题的开始,抱歉。
我想要做的是,在加载预设值时,解析它以准备计时器/数据接收事件,以便不必每秒为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,但我不知道它是否适用于此情况。感谢;I_
sin()
调用并不算什么。即使是 iPhone 5 也可以每秒钟执行约 600 万个sin()
计算。 - mvds