MoveManager:移动管理类

struct MoveOpt
{
int cur_seq;
ObjecInfo* obj;
};
std::map<ObjID, MoveOpt> m_move_objs;//主要容器
//加入移动标记
void MoveManager::add_mask(ObjecInfo* obj)
{
auto& objId = obj->objId;
MoveOpt mov_opt = {m_move_seq++, obj};
m_move_objs[objId] = mov_opt; } 主要函数
//每个玩家都有std::vector<ObjTgtPos> tmpPos;临时位置
//用于保存附近玩家的移动信息,所有当一个玩家或者NPC移动时addMask()这样其就加入到m_move_objs
void MoveManager::run()
{
time_t tb = GetTickCount(); if(m_move_objs.empty())
return ; //需要通知的player
std::map<int, PlayerInfo*> tmpPlayers;
for(auto it = m_move_objs.begin(); it != m_move_objs.end(); ++it)//遍历移动玩家列表
{
auto objex = (ObjecInfoEx*)it->second.obj;
ObjTgtPos pos;
pos.seq = it->second.cur_seq; //顺序变量
pos.speed = objex->speed;
pos.objId = objex->objId;
pos.player.tgtPos = objex->tgtPos;
pos.player.curPos = objex->curPos;
pos.mov_face = objex->mov_face;
pos.dir = objex->dir; if(it->first.type == ObjID_Player)
{
auto player = (PlayerInfo*)objex;
auto& near_pls = player->nearby_players;
for(auto p : near_pls)
{
//将玩家的移动位置和顺序变量加入到其附近玩家的tmpPos
p.second->tmpPos.push_back(pos);//临时位置,我在想为什么要搞个向量保存,每次只保存一个还要向量?
tmpPlayers[p.first] = p.second;
}
}
else
{
//NPC也是将其位置加入到附近玩家的tmpPos
auto monster = (I_NPC*)objex;
auto& near_players = monster->map_nearby_player;
for(auto p : near_players)
{
p.second->tmpPos.push_back(pos);
tmpPlayers[p.first] = p.second;
}
}
}
//然后向附近玩家发送位置信息,然后客户端表现就行了
for(auto it = tmpPlayers.begin(); it != tmpPlayers.end(); it++)
{
it->second->send_mul_pos(it->second->tmpPos);//std::vector<playerTgtPos> tmpPos
it->second->tmpPos.clear();
} this->clear();//清除本次移动记录将m_move_objs.clear()和m_move_seq这个m_move_seq到底什么用?
time_t te = GetTickCount() - tb;
}

玩家或者NPC移动,加入到m_mapMoveObjs中,然后map定时50ms遍历这map,将位置信息加入到附近玩家的临时位置中,最后通知这些玩家,感觉有点蛋疼啊

MoveManager管理类的更多相关文章

  1. 【Unity3D游戏开发】之全局管理类的几种方式 (十六)

    如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...

  2. Unity协程(Coroutine)管理类——TaskManager工具分享

    博客分类: Unity3D插件学习,工具分享 源码分析   Unity协程(Coroutine)管理类——TaskManager工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处 ...

  3. [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】

    本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...

  4. FreeOnTerminate 的线程在线程管理类的Destroy释放时手工释放的问题

    这个问题折腾了我整整一天. 有一个线程管理类,集中管理所有新建的线程, 线程统一在创建时标识 FreeOnTerminate 为 True. 因为有的线程是不限次循环的,所以在管理类最后 Destro ...

  5. C++智能指针管理类

    1.程序员明确的进行内存释放 对于c++程序员,最头脑的莫过于对动态分配的内存进行管理了.c++在堆上分配的内存,需要程序员负责对分配的内存进行释放.但有时内存的释放看起来并不件很轻松的事,如下程序 ...

  6. GS LiveMgr心跳管理类

    struct LiveMgr { private: int m_nCount; ///< 管理数量 std::vector<int> m_vecChannels; ///< 所 ...

  7. cocos2d-x lua 实现单例(管理类)

    cocos2d-x lua 实现单例(管理类) version: cocos2d-x 3.6 示例代码 local DogManager = class("DogManager") ...

  8. Quartz管理类

    package com.sihuatech.project.task.manager; import java.text.ParseException; import org.quartz.CronT ...

  9. (转)Quartz.NET管理类

    最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...

随机推荐

  1. 理解C#系列 / 核心C# / 判断&循环&跳转

    判断&循环&跳转 说明 本节写的是C#语言的控制程序流的语句,“控制程序流”就是控制程序运行流程的意思. 判断 很容易理解:如果……就…… if语句:测试特定条件是否满足,如果满足就执 ...

  2. 20141113--SQL 事务

    ---------------------触发器----------------------------- --触发器本质上还是一个存储过程,trigger --只不过不是通过exec调用执行,而是通 ...

  3. 怎样把function中的arguments变成普通数组

    当我们在写一个具有处理可变长度参数的函数时,需要对arguments做一些操作.但是arguments它并不是一个数组,没有数组的各种操作,而且,JS的严格模式中不允许更改它的值. 这时我们需要将它的 ...

  4. 在hibernate中使用c3p0数据源

    1.  jar包  hibernate-release-4.1.8.Final\lib\optional\c3p0 2.  加入配置:   <!-- 数据库连接池最大连接数 -->  &l ...

  5. Python的类变量和对象变量声明解析

    Python的类和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有.这里我主要想讨论一下他们的声明办法. 首先说的是对象变量: 只要是声明在类的 ...

  6. CentOS6.5升级手动安装gcc4.8.2

    一.简易安装 操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2 不能通过yum的方法升级,需要自己手动下载安装包并编译 1.1 获取安装包并 ...

  7. Object-C编译的Protobuf

    因工作需要,要编译Object-C可用的Protocbuf,开始查资料, http://www.cnblogs.com/uniy/archive/2011/12/21/2296405.html 结果执 ...

  8. 腾讯微博OAuth2.0 .NET4.0 SDK 发布以及网站腾讯微博登陆示例代码(原创)

    1.使用简单方便,包含详细注释: 2.暂时只支持xml格式字符串的转换,建议接口使用xml参数:3.QweiboSDK.Controllers命名空间下已包含所有API接口:4.只需调用到Qweibo ...

  9. line-height属性使文字垂直居中原理

    原理:line-height与font-size的计算之差(在CSS中成为“行间距”)分为两半,分别加到一个文本内容的顶部和底部,这样就使得文字垂直居中了.

  10. Python脚本控制的WebDriver 常用操作 <十五> 处理Navigation Bar

    下面将使用WebDriver来模拟操作:选择一个Navigation bar的选项 测试用例场景 Navigation Bar可以看作是简单的类似于tab的导航栏.一般来说导航栏都是ul+li.先定位 ...