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;
}
时间: 2024-10-06 20:04:53

MoveManager管理类的相关文章

用户和组管理类命令

1.列出当前系统上所有已经登陆的用户的用户名,注意:同一个用户登陆多次,则显示一次即可. who |cut -d' ' -f1 | sort | uniq 2.取出最后登陆到当前系统的用户的相关信息 w|tail-n1或者who|tail-n1 3.取出当前系统上被用户当做其默认shell的最多的那个shell cat /etc/passwd | awk -F':' '{print $7}'|uniq –c 结果为:/sbin/nologin awk -F':' '{a[$7]++}END{fo

DownloadManager 下载管理类

演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端只需要给出请求的Uri和存放目标文件的位置即可,下载管理使用了一个AIDL服务器,所以可以放心的在后台执行,同时实例化的方法需要使用getSystemService(Context.DOWNLOAD_SERVICE) ,我们可以轻松的通过新增的这个API实现Android平台上的文件下载操作. Do

转 学生管理类

看上去很工整. <!DOCTYPE html><html><head> <title>学生管理类</title></head><body><form method="post"> 学号:<input type="text" name="number"><br/> 姓名:<input type="text"

linux用户和管理类常用命令

1.列出当前系统上所有已经等了的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. 2.取出最后登录到当前系统的用户的相关信息 3.取出当前系统上被用户当作其默认shell的最多的那个shell. 4.将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中. 5.取出当前主机的IP地址,提示:对ifconfig命令进行切分.  6.取出/etc/目录下所有以.com结尾的文件的文件名,并将其名字转换为大写后保存至/t

1、自学——Linux的学习进度与任务【时间日期管理类的命令】

时间日期管理类的命令 时间日期管理类的命令:  # date :显示 # date MMDDhhmm[CC]YY.ss :设定 # date [+FORMAT] %Y:4位年份 %y:  2位年份 %M:  分 %m:月 %d:  日 %H:  时 %S:  秒 %T: 时间(以冒号隔开) %D:日期 %F: 日期(以横杆隔开) unix元年:1970-01-01 00:00:00 %s:timestamp:从unix元年开始到此刻所经历的秒数 # cal   :    显示日历 # cal #

Linux学习笔记之常用用户管理类命令

开始这个话题之前应该先了解下/etc/shadow这个文件中的构造,对于列所代表的意思大体有个了解,先以ftpuser账户来介绍:后边会给出一些相应的例题来做使用说明补充(好吧我承认,这,又是一篇博客作业^_^万恶的标题党). ftpuser:$6$T9WUEls/$AK4hTO1bZ7MXW7VoMej8e7tVG1qqxPy5axVJAAIz4m6uuzZmoYDcQjUG2XlXx7klx/i8yJ1luZDtoKYwJAMa4.:16929:0:99999:7:5:: 总共有9个字段被"

动态内存管理类

内存管理类需要包括以下几个基本操作的正确性 添加元素:判断管理的空间大小是否能够添加新元素,如不够,则使用allocator分配内存,并将旧数据移动到新内存,然后释放旧内存,并更新内存首指针.第一个可用内存指针.尾指针位置. 对象拷贝:使用allocator的allocate分配内存,相关的uninitialized_copy拷贝元素到新的位置,并更新内存首指针.第一个可用内存指针.尾指针位置. 内存释放:使用allocator的destroy销毁内存,并使用deallocate执行内存回收操作

下载的管理类MyDownloadManager

import android.content.Intent; import android.net.Uri; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; /** * 下载的管理类 */ public class MyDownloadManager { public sta

用户和组管理类命令总结

用户和组管理类命令总结 一.用户管理 1.用户创建:useradd 2.用户属性修改:usermod 3.修改用户属性:chage 4.删除用户:userdel 5.给用户添加密码:passwd 6.切换用户或以其他身份执行:su 二.组管理 7.组创建:groupadd 8.组属性修改:groupmod 9.组删除:groupdel 10.组密码:gpasswd 11.临时切换基本组:newgrp 三.查看信息 12.查看用户相关的ID信息:id 13.其他查看信息的命令:chfn.chsh.