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 ...
随机推荐
- sql server 查找字段上的约束
1. 当字段没有默认值或者约束的时候可以使用: alter table [table_name] drop column [column_name] 来删除. 当有默认值的时候应该先删除默认值,然后再 ...
- UI5_HomeWork
// // View.h // UI5_HomeWork // // Created by zhangxueming on 15/7/2. // Copyright (c) 2015年 zhangxu ...
- php面向对象的特性:OOP的继承
1.关键字extends 2.PHP只支持单继承,不支持方法重载 /*使用protect 调用字段*/ class Computer{ //父类的字段 protected $_name="联 ...
- 用cudamat做矩阵运算的GPU加速
1. cudamat简介 cudamat是一个python语言下,利用NVIDIA的cuda sdk 进行矩阵运算加速的库.对于不熟悉cuda编程的程序员来说,这是一个非常方便的GPU加速方案.很多工 ...
- double与int类型自动转换
package com.abc.test; public class SumTest { public static void main(String[] args) { //题目A:2+4+6+8+ ...
- EF调用函数日期查询
q = q.Where(t => System.Data.Entity.SqlServer.SqlFunctions.DateDiff("dd", t.Date, dDate ...
- PCB常用度量衡单位
1英尺=12英寸 1英寸inch=1000密尔mil 1mil=25.4um 1mil=1000uin (mil密耳有时也成英丝) 1um=40uin(有些公司称微英寸为麦,其实是微英寸) 1OZ=2 ...
- ORACLE 基础知识积累
创建ORACLE 数据库,首先用Sys账号角色为dba进入数据库然后,然后根据创建数据库的表空间,然后创建角色,创建完角色后将表空间的权限授予角色. SQL语句如下: create temporary ...
- 纯js分页代码(简洁实用)
纯js写的分页代码. 复制代码代码如下: //每页显示字数 PageSize=5000; //分页模式 flag=2;//1:根据字数自动分页 2:根据[NextPage]分页 //默认页 start ...
- 分享:JS比较两个日期大小
发布:thatboy 来源:Net [大 中 小] 本文介绍下,在javascript代码中,比较两个日期大小的方法,有需要的朋友参考下. 转自:http://www.jbxue.com/ ...