您的位置:首页 > 其它

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

2008-03-13 23:16 387 查看
下面再来详细地分析一下,当玩家按下向上方向键时第二人生到底做了些什么呢?又是怎么样地控制人物向前行走的呢?下面的函数就是实现这样的功能:
#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 深圳
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: