(一)地图类
每个地图的管理需要保存在该地图的所有玩家信息以及他们的链接。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Message;using Common;
using Common.Data;using Network;
using GameServer.Managers;
using GameServer.Entities;
using GameServer.Services;namespace GameServer.Models
{class Map{internal class MapCharacter{public NetConnection<NetSession> connection;public Character character;//该地图中的角色个体 存储其信息和 链接会话public MapCharacter(NetConnection<NetSession> conn, Character cha){this.connection = conn;this.character = cha;}}public int ID{get { return this.Define.ID; }}internal MapDefine Define;/// <summary>/// 地图中的角色,以CharacterID为Key/// </summary>Dictionary<int, MapCharacter> MapCharacters = new Dictionary<int, MapCharacter>();/// <summary>/// 刷怪管理器/// </summary>//SpawnManager SpawnManager = new SpawnManager();//public MonsterManager MonsterManager = new MonsterManager();internal Map(MapDefine define){this.Define = define;//this.SpawnManager.Init(this);//this.MonsterManager.Init(this);}internal void Update(){//SpawnManager.Update();}/// <summary>/// 角色进入地图/// </summary>/// <param name="character"></param>internal void CharacterEnter(NetConnection<NetSession> conn, Character character){Log.InfoFormat("CharacterEnter: Map:{0} characterId:{1}", this.Define.ID, character.Id);character.Info.mapId = this.ID;this.MapCharacters[character.Id] = new MapCharacter(conn, character);//角色进入地图响应conn.Session.Response.mapCharacterEnter = new MapCharacterEnterResponse();conn.Session.Response.mapCharacterEnter.mapId = this.Define.ID;//让其他玩家知晓该角色进入地图foreach (var kv in this.MapCharacters){conn.Session.Response.mapCharacterEnter.Characters.Add(kv.Value.character.Info);if (kv.Value.character != character)this.AddCharacterEnterMap(kv.Value.connection, character.Info);}//foreach (var kv in this.MonsterManager.Monsters)//{//    conn.Session.Response.mapCharacterEnter.Characters.Add(kv.Value.Info);//}conn.SendResponse();}internal void CharacterLeave(Character cha){Log.InfoFormat("CharacterLeave: Map:{0} characterId:{1}", this.Define.ID, cha.Id);foreach (var kv in this.MapCharacters){this.SendCharacterLeaveMap(kv.Value.connection, cha);}this.MapCharacters.Remove(cha.Id);}void AddCharacterEnterMap(NetConnection<NetSession> conn, NCharacterInfo character){if (conn.Session.Response.mapCharacterEnter == null){conn.Session.Response.mapCharacterEnter = new MapCharacterEnterResponse();conn.Session.Response.mapCharacterEnter.mapId = this.Define.ID;}conn.Session.Response.mapCharacterEnter.Characters.Add(character);conn.SendResponse();}void SendCharacterLeaveMap(NetConnection<NetSession> conn, Character character){Log.InfoFormat("SendCharacterLeaveMap To {0}:{1} : Map:{2} Character:{3}:{4}", conn.Session.Character.Id, conn.Session.Character.Info.Name, this.Define.ID, character.Id, character.Info.Name);conn.Session.Response.mapCharacterLeave = new MapCharacterLeaveResponse();conn.Session.Response.mapCharacterLeave.entityId = character.entityId;conn.SendResponse();}internal void UpdateEntity(NEntitySync entity){foreach (var kv in this.MapCharacters){if (kv.Value.character.entityId == entity.Id){kv.Value.character.Position = entity.Entity.Position;kv.Value.character.Direction = entity.Entity.Direction;kv.Value.character.Speed = entity.Entity.Speed;//if (entity.Event == EntityEvent.Ride)//{//    kv.Value.character.Ride = entity.Param;//}}else{MapService.Instance.SendEntityUpdate(kv.Value.connection, entity);}}}/// <summary>/// 怪物进入地图/// </summary>/// <param name="character"></param>internal void MonsterEnter(Monster monster){Log.InfoFormat("MonsterEnter: Map:{0} monsterId:{1}", this.Define.ID, monster.Id);foreach (var kv in this.MapCharacters){this.AddCharacterEnterMap(kv.Value.connection, monster.Info);}}}
}

(二)地图管理器
使用地图管理器保存地图类和获取哪张图

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common;
using GameServer.Entities;
using GameServer.Models;
using Message;
using GameServer.Managers;namespace GameServer.Managers
{class MapManager : Singleton<MapManager>{Dictionary<int, Map> Maps = new Dictionary<int, Map>();public void Init(){foreach(var mapdefine in DataManager.Instance.Maps.Values){Map map = new Map(mapdefine);Log.InfoFormat("MapManager,Init -> Map:{0}:{1}",map.Define.ID,map.Define.Name);this.Maps[mapdefine.ID] = map;}}public Map this[int key]{get{return this.Maps[key];}}public void Update() //地图周期刷新函数{foreach (var map in this.Maps.Values){map.Update();}}}
}

RPG游戏-地图场景管理维护(服务器)相关推荐

  1. RPG游戏战斗场景的设计

    之前在学习设计模式,很有感触,感觉之前写的代码真的是太挫了.于是就打算开发一个简单的RPG游戏练一练. 正所谓有了锤子看什么都像钉子,各个模块写之前都想一想能不能用一些设计模式来设计. RPG游戏的战 ...

  2. 游戏开发入门(八)游戏中的场景管理

    视频链接:游戏开发入门(八)游戏中的场景管理(5节课 时常:约2小时07分钟) 授课者通过2D围棋的例子,逐步拓展成3D的虚拟游戏世界.这个3D游戏世界基本上就可以涵盖市面上所有类型的游戏了,我们通过 ...

  3. 服务器机房 维护,服务器机房建设与管理维护.pdf

    服务器服务器机房机房建设与管理维护建设与管理维护 服务器服务器机房机房建设与管理维护建设与管理维护 电子科技大学信息中心 目录 服务器机房的设计和建设 服务器机房的设计和建设 服务器机房的运行维护和管 ...

  4. 3D游戏引擎入门课程——场景管理

    目录 写在前面 场景管理 场景管理概述与BVH 场景组织结构:场景树,八叉树和BSP树 场景树 八叉树 BSP树 场景管理实例 OGRE场景管理 OSG场景管理 Panda3D场景管理 写在前面 本专 ...

  5. 梦幻新开服务器维护,梦幻西游:又要上线新地图吗?维护后换卡系统上线新场景成就...

    原标题:梦幻西游:又要上线新地图吗?维护后换卡系统上线新场景成就 游戏的意义就在于它能够给人带来快乐,如果过多的掺杂其他的东西就失去了其本身的意义,大家好,我是小三,每天给大家分享游戏中的八卦趣事. ...

  6. RPG血腥僵尸感染像素恐怖游戏素材地图场景

    恐怖主题RPG像素游戏场景以及角色(行走动画),适用于1616 3232RPGMaker VX,以及48*48 MV版本.以下场景只做展示,实际文件为平铺图块,不包含拼接好的成品地图. 适合恐怖类主题 ...

  7. 3D游戏引擎中常见的三维场景管理方法

    对于一个有很多物体的3D场景来说,渲染这个场景最简单的方式就是用一个List将这些物体进行存储,并送入GPU进行渲染.当然,这种做法在效率上来说是相当低下的,因为真正需要渲染的物体应该是视椎体内的物体 ...

  8. 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景

    开言: 在RPG游戏中,如果有地图切换的地方,通常就会使用幕布效果.所谓的幕布其实就是将两个矩形合拢,直到把屏幕遮住,然后再展开直到两个矩形全部移出屏幕. 为了大家做游戏方便,于是我给这个引擎加了这么 ...

  9. 3D游戏场景管理概述

    参考文章 http://www.cnblogs.com/kex1n/archive/2012/08/26/2657054.html 关于场景管理概述 http://www.cnblogs.com/wa ...

最新文章

  1. 基于线段的激光雷达和单目联合曲面重建
  2. 如何在linux下yum安装mysql_linux下使用yum安装mysql详解
  3. python 相关系数函数会产生无穷大吗_python 求相关系数
  4. android aidl和普通service
  5. jsp调用Python
  6. C++ 类的静态成员详细讲解(转)
  7. MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
  8. LeetCode—1.快速排序算法
  9. Giroro制造武器
  10. Db2性能问题:临时表空间太大,导致连不上数据库
  11. MFI认证——什么是苹果MFI认证
  12. linux 文件锁 超时,Linux中的两种文件锁——协同锁与强制锁
  13. mysql wait for flush,Mysql线程大量Wating For table flush问题分析
  14. 设计模式 — 抽象工厂模式
  15. 个人作品设计展示官网源码
  16. 本地提交spark_Spark 任务提交
  17. 矿区无人值守称重系统权限有哪些,怎么分配
  18. 报童卖报matlab,两个报童卖报的故事
  19. HBase简单API
  20. jetson nano 环境配置(pytorch+ros+rartographer)

热门文章

  1. 前端jquery判断元素是否隐藏
  2. 置换矩阵与转置矩阵之间的联系
  3. JS 如何将 HTML 页面导出为多页 PDF
  4. 如何将node项目部署到云服务器 从0开始详细步骤
  5. python 除法向下取整、向上取整
  6. Excel图表之美-陈明霞-专题视频课程
  7. android 开机画面定制
  8. Python开发-Django 开源项目
  9. APS计划智能车间解决方案
  10. 使用matlab对sinc函数进行最小二乘拟合仿真