优化标准键盘事件
|
|
|
作者:佚名
来源:InterNet 加入时间:2005-2-7 |
Director本身提供了一个非常灵活的创作环境,但其本身对键盘输入的处理并不尽如人意,本文旨在提供一些优化标准键盘事件的思路。
首先让我们先来了解一下Director中事件的执行过程。
当一个事件产生后,一旦遇到了与其名称相同的处理程序就会被截取,也就是说,一个事件能否起作用,不仅与事件本身有关,更重要的是应该存在可以截取它的处理程序。由此可见,如果能够在程序执行的间隙执行按键检测,即可触发影片剧本中相应的新的事件。
为了达到这个目的,可以在影片剧本中建立如下的idle或timeOut事件处理程序:
on Idle if the controlDown then ControlDown end if if the shiftDown then ShiftDown end if end
on ControlDown put "ControlDown" -- do control stuff end
on ShiftDown put "ShiftDown" -- do shift stuff end
注意上面的例子并没有直接使用处理程序来截取Shift或Control键的按下状态,而是先在idle事件处理程序中进行检测,这样做可以使按键检测所消耗的系统资源降至最低。当然,无论使用什么方法进行按键检测,最终都需要知道任意时刻按键的状态。通常我们都是采取全局变量存储按键状态的方法,其实在这里可以采取另外一种更快捷有效的方法。
通过在影片剧本中声明一个属性变量,即可在影片剧本中直接引用这个属性。举个简单的例子,如果我们在编号为1的影片剧本中用“property pControlDown”声明了一个属性变量pControlDown,那么此后即可直接引用这个属性变量并对其进行像“script(1).pControlDown = 0”的存取操作。
综上所述,我们可以编写出下面这样的优化程序:
property pCommandDown property pOptionDown property pControlDown property pShiftDown
on idle if the commandDown then CommandDown else CommandNotDown end if if the optionDown then OptionDown else OptionNotDown end if if the controlDown then ControlDown else ControlNotDown end if if the shiftDown then ShiftDown else ShiftNotDown end if end
on ControlDown if script(1).pControlDown = 0 then script(1).pControlDown = 1 -- here you can do stuff put "ControlDown" end if end
on ControlNotDown if script(1).pControlDown = 1 then script(1).pControlDown = 0 -- here you can do stuff put "ControlUp" end if end
on CommandDown if script(1).pCommandDown = 0 then script(1).pCommandDown = 1 -- here you can do stuff put "CommandDown" end if end
on CommandNotDown if script(1).pCommandDown = 1 then script(1).pCommandDown = 0 -- here you can do stuff put "CommandUp" end if end
on OptionDown if script(1).pOptionDown = 0 then script(1).pOptionDown = 1 -- here you can do stuff put "OptionDown" end if end
on OptionNotDown if script(1).pOptionDown = 1 then script(1).pOptionDown = 0 -- here you can do stuff put "OptionUp" end if end
on ShiftDown if script(1).pShiftDown = 0 then script(1).pShiftDown = 1 -- here you can do stuff put "ShiftDown" end if end
on ShiftNotDown if script(1).pShiftDown = 1 then script(1).pShiftDown = 0 -- here you can do stuff put "ShiftUp" end if end
[文章录入员:nancy] |
|
|
|
|