游戏中小地图的实现

游戏中,某些场景会用到小地图。

如其名,小地图的本质是地图,缩略的简化的二维坐标集合体,不标示高度,只标示平面坐标。小地图的关键是比例尺。只需将实际物体位置按比例标示在一个缩略图上。物体可以按照是否有变动(是否一直存在,位置是否会更改)分为两种,静态物体和动态物体。静态物体直接绘制到背景图片里,动态物体,给一个标志,需要根据它的存在状态和位置变化实时标示在小地图中的位置。

做小地图,还需要明晰,哪些是需要在小地图上反映的,哪些可以省略。比如,考虑到游戏的目的以及游戏性能等,在moba战斗中,我只是想知道主角的位置,野怪的位置,血泉的状态,至于小兵,如果不在乎,可以不用在小地图中反映小兵信息。

条件:美术提供按比例绘制的静态物体的背景图。横向比例尺和纵向比例尺尽量保持一致。

美术可以告诉你比例尺,但我觉得更好的是,定2个基准点,根据基准点在实际场景中的坐标以及小地图里的相对坐标计算比例尺。有了比例尺,就能将场景中所有的物体坐标实时反馈到小地图上。

private void CalLittleMapScale()
    {
		float mapWidth = Mathf.Abs(m_TransMapBase1.localPosition.x - m_TransMapBase2.localPosition.x);
		m_fMapScale = mapWidth / Mathf.Abs(m_db.m_goMobaBase1.transform.position.x - m_db.m_goMobaBase2.transform.position.x);     //需要美术保证宽高同比缩
		m_vSceneCenter = (m_db.m_goMobaBase1.transform.position + m_db.m_goMobaBase2.transform.position) / 2.0f;
    }
private void WorldPositionToLittleMapPos(GameObject _mapPoint, Vector3 _worldPos)
    {
        Vector3 vPosFromWorldCenter = _worldPos - m_vSceneCenter;
        _mapPoint.transform.localPosition = new Vector3(vPosFromWorldCenter.x * m_fMapScale, vPosFromWorldCenter.z * m_fMapScaleZ, _mapPoint.transform.localPosition.z) + m_TransMapCenter.transform.localPosition;
    }

要点:

1.定基准点,计算比例尺。看需要是否横向纵向分别计算。

2.根据比例尺计算实际物体位置在小地图上的坐标。注意用localPosition,建议用相对中心位置的偏移。

这里处理了小地图上物体位置的更新,还有玩家被杀害,防御建筑被摧毁等导致的显隐需求。需要建立小地图上的点和实际GameObject的映射关系,用事件委托的方式,在GameObject被摧毁时,通知小地图隐藏相应的点。

当然,一些游戏对小地图的要求更高,地图范围广,根据玩家的游戏进度和目前所有位置仅显示当前一部分,在端游中比较常见,手游一般直接全部显示了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 00:51:21

游戏中小地图的实现的相关文章

HTML5 2D平台游戏开发——地图绘制篇

此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-based,即基于瓦片风格和美术风格两种.Tile-based的典型代表是<Super Mario>(超级马里奥),Art-based记不太清楚了,能够回想起来的是去年出的一款叫做<Owlboy>(猫头鹰男孩)的游戏.      Super Mario  Owlboy 由于Art-based的

arpg网页游戏之地图(四)

这一节主要是针对上一节的补充,关于地图的优化策略上一节中已经涉及了一些,这一节具体说下. 地图块加载队列:就拿1280*800的屏幕分辨率来讲,大约需要加载的地图块为30~35块之间,如果这个时候一下子加载这么多地图块,占用的网络带宽会比较多,因为IE加载资源也是有限制的,如果多余限制就会加入排队机制.所以这个时候,就需要一个地图加载队列,来限制同时加载地图块的数量,比如可以同时加载两个,当两个当中哪个Loader加载完,此对象回收,然后重新下一个. 渲染策略优化,实际就是分帧运算的远离.即没帧

arpg网页游戏之地图(三)

地图分块加载类MapEngine,主要包含以下属性: g 地图层graphics,地图将画在上面 buffPixelRange 地图加载范围矩形 viewPort 屏幕视窗 currZoneArr 已经加载过的地图块 waitLoadZone 待加载地图块 showZone 加载完成即将显示的地图块 preLoaderNmu 预加载块数 单独说下地图层graphics,Graphics实际上为一个shape对象,我把所有的加载的地图块,draw到graphics上,也有很多创建多个bitmap对

arpg网页游戏之地图(二)

这一节说说视窗,这个视窗,也就是游戏的视角.现在的网页游戏分为2D游戏,2.5D游戏和3D游戏,2D游戏基本是一些横板的,2.5D基本都是arpg的,可以说游戏画面投影的角度略有不同,3D网页游戏,现在也有不少,效果做的不错的,都是带微端的,不带微端同屏人数过多就会出现卡顿的情况.个人感觉网页还不太适合做3D的,一是效率问题,二是表现效果不如端游炫.端游开发周期较长,世界观比较宏大,玩家呢,要适应游戏世界,并在里面找到自己的定位,这样玩家的忠诚度比较高:而网页游戏的目的不恰恰相反,它主要是迎合玩

arpg网页游戏之地图(一)

开发arpg网页游戏一项比较重要的难点是游戏推图.游戏中主城的地图比较大,我遇到到最大的是8000*6000的地图,比较小的就是副本地图,有可能还占不了一屏.像这种比较大的地图,一般都是分块加载的,游戏中不可能一次将整个地图添加到舞台上,得根据角色的移动视窗来加载地图.这个时候会碰到三种情况:人动,地图动:人不动,地图动:人动,地图不动.我试过前两周情况,人动,地图动,这种情况画面看着比较流畅,人不动,地图动,不太流畅.所以选择了前者. 什么是人动,什么是地图动?开发网页游戏都是分层的,一般分为

MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)

地图的数据以及区域的信息是场景的重要组成部分,这些数据同时存在客户端和服务器,而且都是由编辑器生成的.那么保存的文件数据结构是怎样的?一张3D的场景地图又是怎样处理这些数据的?同时告诉大家这里同样只是讲的理论与设计,理论和设计往往都很空洞,但是却很灵活,需要靠每个人怎么运用. 一些图片 区域和格子 从上面的截图可以看出游戏场景其实是由格子来区分的,不管是矩形的格子还是其他形状的格子也好,一张地图不可能只有一个点(即多点组成一张地图).在3D场景中似乎格子的位置总伴随着高度信息,所以让人感觉有些迷

兵棋系列2----兵棋游戏中地图滑动和委托消息

前几天写了一个六边形阵列的算法,今天周末比较闲,下午没事就做了做兵棋的地图操作,一点一点的做吧,总会做好,毕竟我也经常玩各种棋,对做一个这类型的小游戏非常感兴趣. 首先来解释下,下面要出现代码的操作.如上图,当鼠标指针移动到地图的四个边时,地图会自动左右上下滑动(地图比这个from要大很多,不这么做地图显示不完整了,不要跟我说用滚动条,那个给人感觉不好,这也是兵棋里不会缺少的操作吧),同时下面的消息框会记录鼠标的位置,这个消息框前期为我开发时显示一些测试信息用的,后期应该会把它改成一个功能区(部

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕

卡马克算法(地图重复利用,跑酷类游戏)

----------------------------下面是理论知识-------------------------- 卡马克算法:由约翰·卡马克(John Carmack)开发的一种游戏地图处理方法,被广泛运用到2D卷轴式游戏和手机游戏中.约翰·卡马克:id Software创始人之一,技术总监.享誉世界的著名程序员,以卡马克算法和3D游戏引擎开发而闻名世界,被奉为游戏行业偶像.同时他也是个全面型的技术天才,现在致力于民用航天器开发,是民用航天器开发小组Armadillo Aerospac