注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[C4] InputMgr 与 按键消息的分发  

2010-06-16 18:55:15|  分类: 3d_C4 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
TheInputMgr <== 1:* ==> InputDevice <== 1:* ==> InputControl <== 1:1 ==> Action
TheInputMgr, singleton,管理着多个 InputDevice,比如:鼠标、键盘、Joystick都算一种 InputDevice。
一个 InputDevice 对应多个 InputControl,比如:鼠标就是一个 InputDevice,而 左键、右键、X轴、Y轴等等,就是 InputControl。
InputControl 对应了一项具体的物理逻辑,比如鼠标左键按下。而按下后具体触发怎样游戏逻辑,则由 Action 决定。

但我们看 SimpleBall 的例子,会发现初始化时,只是简单地将 MovementAction 丢给了 TheInputMgr。而 MovementAction 就是简单了继承了 Action。没有看到任何button press到Action的绑定逻辑。
---------------------------------------------------------------
enum
{
    kActionLeft     = 'left',
    kActionRight   = 'rght',
    kActionUp       = 'jump',
    kActionDown  = 'down'
};

leftAction = new MovementAction(kActionLeft, kSpectatorMoveLeft);
TheInputMgr->AddAction(leftAction);
---------------------------------------------------------------

最后寻找了半天,终于找到诀窍。因为一个游戏,其实是作为一个 .dll 的 plugin 整合到 C4Engine 中的。可以把 C4Engine 看成是一个 platform。C4通过 PluginMgr ,允许在 input.cfg 中注册按键的绑定关系。如下:
---------------------------------------------------------------
$device = "Keyboard";
bind "W" %frwd;
bind "A" %left;
bind "S" %bkwd;
bind "D" %rght;
---------------------------------------------------------------
则 A键 与值为 'left' 的Action 绑定。这里比较 trick 的地方,就是把 'left' 作为一个 int flag 来标识一个 Action,正好满足 C++ enum 就是一个 int 的条件。
  评论这张
 
阅读(527)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017