`
wgcode
  • 浏览: 599765 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MMORPG 地图实现

阅读更多

网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法。
常见的三种方式:
1、整图
2、Tile元素拼装
3、栅格化切片
整图



 

整图加载很好理解直接加载一张背景图。这种方式比较适合小场景(面积不要超过两屏),例如可以用来做悦来客栈、家里的菜园子或者王员外的内院。
整图的表现最大的优点就是可以让美工随意发挥,画面可以做得很细致。当然缺点也比较明显无法做得太大,否则加载将是个漫长的过程,即使玩家有耐心去 等待加载,但是会浪费客户端的很多内存容量。一个10屏*10屏的地图,客户端显示每次只能显示一屏,有99屏的东西是暂时用不到的。
Tile元素拼装



 
Tile就是斜视角地图中的一个标准菱形,这在许多的Tile Game里面最常见(红警、帝国时代)。这种方式会实现准备好各种地形,比如草地、沙漠、水面、雪地。理论上这种方式可以满足任何地图需求。
Tile元素拼装的优点是素材包小,因为他是提取了大量的可重复利用的素材在重复使用。素材包小可以节省素材加载时间。
不过Tile元素拼装的方式也不是谁都可以玩得好的,主要问题其实在于这些可重复利用的素材必须是2方连续的。要想让地图表现力好,Tile的制作 比较关键。这并不像整图那样,美工可以大笔一挥画出几种色彩层次。如果Tile素材制作的不好,地图看起来会非常死板。同时Tile元素的制作也必须处理 好各种地形的接壤问题。
比如你有4种地形:草地、水面、沙地、雪地,那么你就必须创建草地和水面交界的效果,水面和沙地,沙地和雪地。。。。然后草地和水面的交界你还需要 考虑草地的上面有水、下面有水、左边有水、右边有水、左上角。。。。。总之就是,你希望你的地图看起来舒服就必须穷举各种情况,然后还要一遍一遍调整。但 是一旦我们做好了这一切,那么将会非常受益。如果你的开发人员有空还可以帮你设计非常好的随机生成算法。(像帝国时代的编辑器)
栅格化切片


 
栅格化切片他的背景绘制其实还是以整图的方式完成的,只是按照一定的大小把它切成了一些固定大小的小图,比如250*250或者300*300,然 后给每张图定好编号,通常是map_行_列。地图加载的时候,我们根据场景的坐标加载需要显示的切片。当然加载的数量通常会比你看到的要多一点,事先预加 载一些。
栅格化切片的方式事实上我们在电子地图上见得很多,当然电子地图是可以进行缩放的,所以他所做的切片通常还会配合缩放倍数做不同倍数下面的分割。
使用栅格化切片表现力上跟整图一样,在制作的时候可以让美工任意发挥。同时也能解决一部分内存浪费的问题。这看起来是个非常完美的方案,甚至可以让我们做无缝地图。可是事实并非如此的,尽管我们有着无穷的想象力,但是我们还是会在制作大地图上遇到问题。
第一个问题——地图的设计
我曾经一厢情愿的规划了一张9000px*7500px的地图让美工去做设计,结果问题来了。这样一张大地图在ps里面打开都是一个漫长的过程,每次做一次存盘都可以去喝杯茶了。尽管效果可以很好,但是等待的过程几乎让人吐血。
第二个问题——地图编辑
我们的地图是在自己开发的air编辑器,尽管这时候的地图已经是ps合层好的了,但是在编辑器中操作仍然是个恶梦。
关于障碍数组
其实对于障碍数组也是地图设计中一个需要考虑的问题的因为这会关系到你的路径算法和物体遮挡,最常见的作法就是建立一个2维数组对应到 地图中,然后使用A*来实现。当然你也可以不这样记录,直接记录地图上物体底面积形成的多边形。寻径的时候采用两点连线然后绕过障碍定点,遮挡关系也利用 这些多边形顶点做计算。甚至你也可以不用2维数组改用object的方式只记录那些被占用了的底面积。。。
但是无论采用什么方式,你的地图大必然参与到引擎中的物体就会多,存储的内容就多。假设你也像我们一样通过2维数组记录障碍,那么数组同样也是限制你实现大地图的一个问题(尽管不是那么明显)。因为你同样会需要浪费到很多内存存大量的暂时用不到的信息。
上面提到了对背景做切割,2维数组如果你愿意也可以做切割来实现随需加载,对于地图上的建筑同样如此。不过我是感觉这样做没有多大意义。从玩家的角度看,真正在乎你的大地图制作的有多少,难道因为你做了个大地图玩家就一定会买账么?
个人建议
实际的开发其实我认为并不一定那种方式更好,取决于公司的开发资源和场景的实际情况,你对客户方的考虑。上面的三种方式我们可以相互结合。
我们可以用Tile拼装的方式结合简单的表随机算法做个平铺工具给美工来快速建立一些地图的局部,让他们直接另存出图片,导入photoshop制作整图。当然如果没时间的话随便找个编辑器也行,反正比photoshop的复制会快很多。
另外,我们可以在设计引擎的时候将整图和栅格化切图的方式一起考虑,对于小场景使用整图加载,对于大场景使用切片加载

  • 大小: 133.5 KB
  • 大小: 145.1 KB
  • 大小: 133.6 KB
分享到:
评论

相关推荐

    flex mmorpg 地图编辑器demo

    本篇将深入探讨一款基于Flex技术的大型多人在线角色扮演游戏(MMORPG)地图编辑器的Demo,通过分析其源码和功能,来揭示其中蕴含的IT知识点。 首先,我们要明确的是,"Flex"是一种基于ActionScript 3的开源框架,...

    MMORPG超大地图中的场景数据组织

    总结来说,本文为MMORPG超大地图中的场景数据组织和负载均衡技术的研究提供了理论基础和实践指导,对于网络游戏开发者而言,这些技术和策略的运用将直接关系到游戏的稳定性和成本效率,是网络游戏研发中不可或缺的...

    skynet mmorpg

    "some-mmorpg-master"这个项目可能包含了MMORPG游戏开发的完整流程,从角色创建、地图探索、战斗系统到社交功能,每个模块都可能对应一个或多个Skynet服务。开发者可以通过阅读和分析这些源代码,了解如何在实际项目...

    某MMORPG手机网络游戏的服务端源码

    总的来说,这份MMORPG手机网络游戏的服务端源码提供了关于网络编程、游戏逻辑实现、数据存储和服务器架构的实战经验。通过对这些源码的研究,开发者不仅可以深化对MMORPG服务端设计的理解,还能学习到如何构建高性能...

    MMORPG架构.docx

    - **结构**:按地图划分服务器。 - **解决方法**:《天龙八部》采用多新手村方案,缓解开服压力。 - **特点**:优化玩家分布,减少新手村拥堵问题。 ##### 4. **当前主流架构** - **关键组件**:GateServer, ...

    MMORPG永恒大陆目前最新源码

    今天我们将深入探讨“MMORPG永恒大陆”——Eternal Lands的112版源码,这是一份包含了客户端和地图编辑器的珍贵资料。 Eternal Lands是一款基于Web的MMORPG,以其丰富的角色扮演元素和独特的世界观吸引了众多玩家。...

    经典代码设计的 简单MMORPG游戏_C++_代码_下载

    1. **面向对象编程**:C++是面向对象的语言,MMORPG的核心在于角色、怪物、物品、地图等对象的创建和交互。这些都可以通过类和对象来实现,每个类代表一个游戏元素,如Player、Npc(非玩家角色)、Item等。类包含...

    Silverlight-MMORPG游戏引擎源码

    Silverlight-MMORPG游戏引擎源码 这里要说明的,此完成度约50%的2D-ARPG游戏引擎存在地图未切割、多线程未优化、算法未优化、无寻路等诸多毛病, 总结原因是架构上一开始就存在着问题,因此我不打算对其再进行完善...

    MMORPG服务器端架构和设计

    4. **地图服务器**:负责游戏世界中不同区域的地图逻辑,管理玩家的位置和移动,同步玩家之间的交互,以及与逻辑地图服务器的数据同步。 5. **角色服务器**:处理特定角色的操作,如角色创建、删除、属性更新等,...

    Flex/Flash实现的地图编辑器源码

    本文将深入探讨一款基于Flex和Flash技术实现的地图编辑器,该编辑器特别适用于构建MMORPG(大型多人在线角色扮演游戏)中的地图。 Flex是Adobe公司推出的一种开源框架,用于构建富互联网应用程序(RIA),其主要...

    MMORPG FLASH 框架

    自己在 2012 年独立写的 MMORPG FLASH 框架, 现在没时间继续写了,现公开源码.希望对大家有帮助 基本实现的功能: 1.界面使用 MinimalComps 实现. 2.socket功能实现. 3.大地图,小地图,自动寻路功能. 4.基本技能,任务...

    代码 kbengine unity3d实现的mmorpg游戏(服务端全部代码 客户端全部代码)

    代码 kbengine unity3d实现的mmorpg游戏(服务端全部代码 客户端全部代码)代码 kbengine unity3d实现的mmorpg游戏(服务端全部代码 客户端全部代码)代码 kbengine unity3d实现的mmorpg游戏(服务端全部代码 客户端全部...

    3D跟随视角MMORPG核心操作及相关设置选项整理

    玩家可以通过各种操作与游戏世界互动,如探索地图、完成任务、与其他玩家交流等。 #### 二、核心操作功能 3D跟随视角MMORPG的核心操作功能对于游戏体验至关重要,它们直接影响玩家与游戏世界的交互方式。以下是...

    cpp-TrinityCore是一个开源的MMORPG游戏框架

    开发者使用C++可以深入到游戏引擎的底层,优化性能并实现高度定制化。C++的模板和面向对象特性也使得代码更易于组织和维护。 MySQL数据库系统在TrinityCore中扮演着重要角色,它是存储游戏世界数据的主要平台。包括...

    Silverlight-MMORPG游戏引擎0112源码

    Silverlight-MMORPG游戏引擎0112源码 这里要说明的,此完成度约50%的2D-ARPG游戏引擎存在地图未切割、多线程未优化、算法未优化、无寻路等诸多毛病, 总结原因是架构上一开始就存在着问题,因此我不打算对其再进行...

    fps.rar_2D Engine_FPS_mmorpg

    在2D引擎中实现MMORPG,开发者需要处理大量的玩家同步问题、网络延迟、地图设计以及服务器负载平衡等复杂问题。 【www.pudn.com.txt】 此文件名可能是从www.pudn.com这个网站下载资源时保留的原始文件名。Pudn.com...

    游戏地图管理

    游戏地图管理是游戏开发中的重要组成部分,特别是在大型多人在线角色扮演游戏(MMORPG)和其他复杂游戏中,地图管理系统对于游戏体验的质量有着深远影响。Delphi是一种流行的面向对象的编程语言,以其高效性和易用性...

    Unity3D MMORPG UI框架代码

    Unity3D是一款强大的跨平台游戏开发引擎,尤其在制作大型多人在线角色扮演游戏(MMORPG)时,其丰富的功能...通过深入研究这个示例,你可以了解到如何组织和实现一个符合MMORPG特性的UI系统,进一步提升你的开发技能。

    Unity UI资源 MMORPG游戏UI资源

    地图UI对于MMORPG至关重要,因为它帮助玩家导航、定位、了解地形和探索世界。 在Unity中,这些UI资源通常会使用Unity的UI系统(Unity UI),这是一个强大的基于Canvas的界面设计工具,允许开发者创建复杂的交互式...

    Ans.zip_RPG_it_java rpg_mmorpg_socket

    在MMORPG中,服务器通常需要处理各种复杂的任务,如玩家角色的状态管理、地图同步、战斗逻辑、交易系统等。多线程技术的应用使得这些任务可以在不同的线程中独立运行,避免了单线程模型中可能出现的阻塞问题,提高了...

Global site tag (gtag.js) - Google Analytics