游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2465|回复: 0

mangos完全分析(3)

[复制链接]

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2008-4-17 22:14:00 | 显示全部楼层 |阅读模式
在mangos里面,好象多线程用得不多,所有的npc,怪,和人物的处理,都是由World::Update(time_t diff),去更新的,此函数会去遍历所有的物体的updata,当在某处物体更新阻塞的情况下会影响到整个地图物体的更新。
     另外在人物属性发生一次变化的时候,不会马上去发包去通知客户端,比如属性更新了两次SetUInt32Value( PLAYER_FIELD_COINAGE , m_dismountCost);SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID , 0);,如果每更新一个小小的属性发一次包实在是浪费网络带宽,也不利于客户端处理。
    实际上,它会把更新收集起来,
void Object::SetUInt32Value( const uint16 &index, const uint32 &value )
{
    ASSERT( index < m_valuesCount );
    m_uint32Values[ index ] = value;
    if(m_inWorld)
    {
        m_updateMask.SetBit( index );
        if(!m_objectUpdated)
        {
     ObjectAccessor::Instance().AddUpdateObject(this);
            m_objectUpdated = true;
        }
    }
}
   在 ObjectAccessor::_update()的时候一并更新到客户端,这个updata间隔很短的,客户端可以接受这个速度。
   (我不是太喜欢mangos大量用模板技术的风格,因为这样我用source insight跟踪代码经常跟不到,造成分析障碍,貌似这个工具对模板支持不好) [em14]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 19:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表