场景的设计
只是简单的概括的流程;
场景管理器
{
map<t_RoleID, GamePlayer*> m_SwtichMapPlayers;//场景里面的玩家
CScene scenes[MAX_SCENE_ID]; //场景容器
}
场景
{
用容器管理格子是否可行,
用容器是否安全区
预先生成每个格子的附近格子
}
格子
{
bool m_bNeedSync; //格子是否需要同步
CSceneCell* nearCell[9]; //包括自己附近的格子九宫格
Tint32 CellId;
Tint32 m_X;
Tint32 m_Y;
set<GamePlayer*> m_PlayerSet; //附近玩家列表
}
SceneMgr
[
Scene[]
[
SceneCell
{
}
]
]
位置同步
fuction(同步)
{
if(格子不需要同步)
{
return
}
ChangeDataList(改变列表)
for(格子上面的所有玩家)
{
if(现在的坐标和上一次一次的坐标不一样)
{
if(间隔大于同步间隔||在战斗中)
{
ChangeDataList.add(改变的玩家)
}
}
}
msg(被发送的数据)
sendMsg(发送函数)
for(附近的玩家)
{
for(ChangeDataList)
{
msg.add(改变的玩家)
if(100 <= msg.size())
{
sendMsg(msg)
msg.Reset(清空发送包)
}
}
if(0 < msg.size())
{
发送剩余不足100的(sendMsg)
}
}
}