您现在的位置: 圆点视线 >> 教程 >> 媒体动画 >> Director >> 文章正文
优化标准键盘事件         ★★★
优化标准键盘事件
作者:佚名  文章来源:圆点视线  点击数:  更新时间:2005-12-27 18:40:02 
 页面功能:【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口 【字体:
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
 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 文章录入:apoints    责任编辑:apoints  【字体:
 
  • 上一篇文章:

  •  
  • 下一篇文章:
  • 最新文章
    相关文章
    Director怎样制作自定义光标
    用Director控制动画GIF
    director应用技巧
    flash和director之间的沟通技巧
    Director中控制声音音量的几种方法
    Director8行为库的应用
    用Director创建涂色板
    认识Director中的Xtra
    如何检测演员的载入进度
    对象列表的调用与删除
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
     姓  名: 评 分: 1分 2分 3分 4分 5分
     评论内容: ·严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
    ·用户需对自己在使用本网服务过程中的行为承担法律责任
    ·本站管理员有权保留或删除评论内容。
    ·评论内容只代表机友个人观点,与本网站立场无关。
     
    最 新 推 荐
     
    百度主题推广
    最 新 热 门