第二人生的源码分析(二十四)人物向前走的键盘消息处理

下面再来详细地分析一下,当玩家按下向上方向键时第二人生到底做了些什么呢?又是怎么样地控制人物向前行走的呢?下面的函数就是实现这样的功能:
#001 void agent_push_forward( EKeystate s )
#002 {
#003       if( KEYSTATE_UP == s ) return;
#004        F32 time = gKeyboard->getCurKeyElapsedTime();
#005       S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount());
#006 
#007       if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)
#008       {
#009              gAgent.moveAtNudge(1);
#010       }
#011       else
#012       {
#013              gAgent.moveAt(1);
#014       }
#015 }
 
上面是向前行走的函数,它调用代理类对象gAgent来更新向前行走的消息,主要调用moveAtNudge和moveAt函数来实现的。这两个函数代码如下:
#001 //-----------------------------------------------------------------------------
#002 // moveAt()
#003 //-----------------------------------------------------------------------------
#004 void LLAgent::moveAt(S32 direction)
#005 {
#006       // age chat timer so it fades more quickly when you are intentionally moving
#007       ageChat();
#008 
#009       setKey(direction, mAtKey);
#010 
#011      
#012       if (direction > 0)
#013       {
#014              setControlFlags(AGENT_CONTROL_AT_POS | AGENT_CONTROL_FAST_AT);
#015       }
#016       else if (direction < 0)
#017       {
#018              setControlFlags(AGENT_CONTROL_AT_NEG | AGENT_CONTROL_FAST_AT);
#019       }
#020 
#021       resetView();
#022 }
#023 
#024 //-----------------------------------------------------------------------------
#025 // moveAtNudge()
#026 //-----------------------------------------------------------------------------
#027 void LLAgent::moveAtNudge(S32 direction)
#028 {
#029       // age chat timer so it fades more quickly when you are intentionally moving
#030       ageChat();
#031 
#032       setKey(direction, mWalkKey);
#033 
#034       if (direction > 0)
#035       {
#036              setControlFlags(AGENT_CONTROL_NUDGE_AT_POS);
#037       }
#038       else if (direction < 0)
#039       {
#040              setControlFlags(AGENT_CONTROL_NUDGE_AT_NEG);
#041       }
#042 
#043       resetView();
#044 }
 
在这两个函数里,主要设置了行走的标志位AGENT_CONTROL_NUDGE_AT_POS或AGENT_CONTROL_NUDGE_AT_NEG,第一个标志是向前行走,第二个标志是向后后退。第二人生里把这些标志设置后,就会通过代理类对象LLAgent向服务器发送行走的标志,然后服务器就计算是否可以行走,并返回人物角色的相应位置,这样在客户端里就可以看到人物在移动了。

蔡军生 2008/3/13 QQ:9073204 深圳

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值