2010-10-28 58 views
0

我将需要处理一个钢琴键,它可以在没有高CPU负荷的情况下尽可能快地做出响应,在Flex应用程序中使用虚拟钢琴重复按键和释放。哪一个是有效的:开关,如果或功能?

调用函数是否有效或切换?

实施例:

switch(keyNote) 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 
case 'c4': keypress.button=down; 

function() { 
if (keyNote=='c4'){keypress.button=down} 
if (keyNote=='c4'){keypress.button=down} 
if (keyNote=='c4'){keypress.button=down} 
if (keyNote=='c4'){keypress.button=down} 
} 

function c4_Key() { 
keypress.button=down; 
} 

我还不知道是否有使用dispatchevent另一方法调用由ID的按钮,设置按钮,向下状态?

+0

我不知道这是可能的动作,但我会建议一个哈希表。 – Andrey 2010-10-28 14:31:02

+3

要小心过早的优化 - 直到你知道存在问题,不要修复性能瓶子。首先对您的应用程序进行配置,然后优化实际放缓的应用程序。 – KevinDTimm 2010-10-28 14:32:25

+1

考虑到你以前的问题,我怀疑这是你的性能问题所在...... – 2010-10-28 14:59:22

回答

4

不要用你自己的,如果,如果,如果功能。编译器不喜欢选项 我会做一个字典对象,这样你可以得到这样的回应(例如,如果可以为true或false):

var keyMap:Dictinary = new Dictionary() 
//Here you would populate the dictionary with the diff. keys and values 

//pseudo body of keyDown test funcion 
keyMap[keyNote].keypress.down; 

或任何你的示例代码力求做到: )

+1

字典比开关更优雅(当然,它比一堆ifs更优雅)。我不确定它会更快(尽管我也怀疑这会是一个真正的瓶颈)。首先,编译器在使用开关时会建立一个非常紧凑的跳转表;我敢打赌,这比动作词典更快(但是,正如我所说的,差异应该是几乎不可见的)。 – 2010-10-28 15:55:04

0

好吧,如果你问一些面向对象的专家,最好的办法是避免像鼠疫这样的条件。 http://www.as3dp.com/2007/12/21/lets-get-rid-of-conditionals/

这个想法是,每个条件是在一个单独的类,覆盖/扩大将做切换的功能。

虽然我个人并没有在我的代码中使用条件,但我仍尝试在条件中使用这种方法。而且你真的可以用这种方式替换所有(几乎)条件,有时这种好处并不会超过进入它的工作,特别是如果你知道你不会扩展代码。

相关问题