MoveManager管理类
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管理类的更多相关文章
- 【Unity3D游戏开发】之全局管理类的几种方式 (十六)
如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...
- Unity协程(Coroutine)管理类——TaskManager工具分享
博客分类: Unity3D插件学习,工具分享 源码分析 Unity协程(Coroutine)管理类——TaskManager工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处 ...
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...
- FreeOnTerminate 的线程在线程管理类的Destroy释放时手工释放的问题
这个问题折腾了我整整一天. 有一个线程管理类,集中管理所有新建的线程, 线程统一在创建时标识 FreeOnTerminate 为 True. 因为有的线程是不限次循环的,所以在管理类最后 Destro ...
- C++智能指针管理类
1.程序员明确的进行内存释放 对于c++程序员,最头脑的莫过于对动态分配的内存进行管理了.c++在堆上分配的内存,需要程序员负责对分配的内存进行释放.但有时内存的释放看起来并不件很轻松的事,如下程序 ...
- GS LiveMgr心跳管理类
struct LiveMgr { private: int m_nCount; ///< 管理数量 std::vector<int> m_vecChannels; ///< 所 ...
- cocos2d-x lua 实现单例(管理类)
cocos2d-x lua 实现单例(管理类) version: cocos2d-x 3.6 示例代码 local DogManager = class("DogManager") ...
- Quartz管理类
package com.sihuatech.project.task.manager; import java.text.ParseException; import org.quartz.CronT ...
- (转)Quartz.NET管理类
最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...
随机推荐
- Oracle中建立物化视图报错
Oracle中建立物化视图报错 今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed. 建视图的语句: create mate ...
- iOS开发中的那些小技巧
前言:今天在写代码的过程中遇到一个需要修改系统navigationBar的背景色,我起初用的是barTintColor去修改但是防不住系统点击按钮的时候会有一个渲染高亮的效果,调了好久没有达到自己想要 ...
- UI1_UITableViewHomeWork
// // AppDelegate.m // UI1_UITableViewHomeWork // // Created by zhangxueming on 15/7/14. // Copyrigh ...
- Linux 静态库与动态库搜索路径设置详解【转】
原文地址:http://blog.chinaunix.net/uid-29025972-id-3855495.html 1. 连接和运行时库文件搜索路径的设置 库文件在连接(静态库和共享库)和运行(仅 ...
- php魔术方法 http_build_query使用
最近在做一个项目使用到 http_build_query 这个魔术方法很好用,它可以将一个数组转换成这样的格式: 比如 $_arr = array('action'=>'show','page' ...
- 【笔记】Windows Phone 8开发笔记之API
Windows Phone 8 API一览 Windows Phone 7平台不支持Native语言的开发,这困扰了许多游戏和底层应用的开发者.Windows Phone 8 SDK的推出,改善了这个 ...
- yum安装报错有冲突file /usr/lib64/php/modules/fileinfo.so conflicts between
yum安装报错有冲突file /usr/lib64/php/modules/fileinfo.so conflicts between attempted installs of php-pecl-f ...
- Mac上安装brew
用过ubuntu系统的都知道,上面有一个命令apt-get 很方便可以快速的安装很多软件 特别lamp环境 都是一键安装. 在mac上也有类似的命令 brew brew用法可以访问官网地址 http ...
- line-height属性使文字垂直居中原理
原理:line-height与font-size的计算之差(在CSS中成为“行间距”)分为两半,分别加到一个文本内容的顶部和底部,这样就使得文字垂直居中了.
- Golang学习笔记
一.基础 1. Hello World程序 demo: package main import "fmt" // 注释 //注释 func main() { fmt.Printf( ...