惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Martin Fowler
Martin Fowler
雷峰网
雷峰网
IT之家
IT之家
小众软件
小众软件
M
MIT News - Artificial intelligence
博客园 - 聂微东
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
C
Check Point Blog
云风的 BLOG
云风的 BLOG
腾讯CDC
H
Help Net Security
Y
Y Combinator Blog
I
InfoQ

博客园 - 糖果的二师兄

记-Docker 服务器时间之ENV环境变量-设置docker容器的时区 mac homebrew国内安装源 解决:Adobe offers you a 5-day grace period to switch to a genuine Adobe app — at a discount — and uninstall unlicensed Adobe apps. ssh登录一些老旧设备,特别是旧版本linux。例如centos5.3之类的 Windows和mac OS共用VMware虚拟机 虚拟机扩容ubuntu22.04磁盘空间到逻辑卷中。 安装openssl 3后error while loading shared libraries: libssl.so.3 WinRAR永久授权专用激活KEY方法(rarreg.key) SAMSUNG SCX4521F (4x21系列) 在MacOS Sonoma下的驱动问题! Hackintosh最简单且正确的USB定制方法 汇编指令速查 mysql 数据库 1130 error PD ubantu 安装 Parallels Tools Cinema 4d R25 C4D Mac版本的Arnold 渲染器 crack. 使用Docker通过aliyundriver-webdav挂载阿里云盘作为本地磁盘使用 unity tilemap 缝隙解决 TBC 2.4.3 Mac客户端 去除新冠疫苗接种系统导出的Excel表格数据中的干扰字符。 Tomcat10 报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
2D游戏地图的设计思路
糖果的二师兄 · 2024-01-18 · via 博客园 - 糖果的二师兄

2D游戏一般按玩家视角可以分为:侧视、俯视、斜45度。横轴游戏一般都属于侧视;俯视一般常见于一些小游戏,号称上帝视角;斜45度就是所谓的2.5D,又称为伪3D,用2D的技术产生3D的效果,主要是看美术绘制的贴图。视角不同,游戏场景的设计是有所差异,今天主要总结下前一周使用Tiled制作地图的一些思路,想了想这些视角应该都是适用的。

设想一下游戏场景中的元素:

  • 草地、沙滩、湖泊。
  • 高大的树木、房子。
  • 桥梁、城墙。
  • 白云、雨、雪。
  • 可以访问的商人或功能性NPC。
  • 地上跑来跑去的小怪物。
  • 天空中飞鸟。
  • 等等。

如何设计一个支持上述元素的地图结构?下面给一个简单的思路。

元素分类:

  • 地表(Tile):使用地表(Terrian)铺成的,位于物件之下或之下。一般位置都是固定的,可以静态也可以动态。如:草地、沙滩等,湖泊等。湖泊往往要显示为水波动的效果。
  • 物件(Object):在地表上面或下面、规则或不规则、位置固定或不固定的东西。如:树木、房子、NPC、怪物、飞鸟等。物件的显示需要根据其位置决定它们的遮挡。如:角色走在一棵大树的后面,就需要先绘制大树然后角色;角色移动到大树的前面,则需要先绘制角色。

地图分层:

为了支持丰富的场景元素,2D地图一般会采用分层结构。下面是一种简单的分层设计,可自行根据需求进行调整。

地表分层:

  • 底层地表(Lower Tile Layer):用来放置最底层的地表元素,如:草地、沙滩。物件一般会绘制于其上。
  • 中层地表(Middle Tile Layer):放置一些细节性的地表元素用来丰富地表,如:地图衔接、边界、装饰地表之类的。
  • 上层地表(Up Tile Layer):可以用来实现一些烟雾效果,或者高大的城墙。上层地表绘制在所有物件之上。

物件分层:

  • 地上物件(Ground Object Layer) :依附在地表之上的,如高大的树木、房子、NPC、怪物等。
  • 通过物件(Pass Object Layer):绘制在地上物件之上或之下,为了实现特殊的一类需要穿越的元素,如桥梁、城墙的门洞等。
  • 天空物件(Sky Objects):绘制在所有物件和地表之上,如:天空中的飞鸟。

绘制顺序:

  1. 底层地表
  2. 中层地表
  3. 地上物件 (第一层)
  4. 通过物件
  5. 地上物件 (第二层)
  6. 上层地表
  7. 天空物件

通过以上这样的分层和元素划分,基本上能满足RPG类游戏的各种地图需求。当然也可以简化下,比如3,4,5简化为地上物件一层即可。3,5的存在是为了支持,站在城墙上和城墙下。当然每一个物件层,遇到位置变化的游戏元素,若角色,跑来跑去的怪物,需要根据位置决定其绘制顺序。对于2D游戏,最简单的判定方式就是根据Y坐标。

制作游戏地图的工具,我选择Tiled,一个免费开源的工具。可以满足各种各样的需求,当然技术牛逼,时间充裕,阵容较大的团队自行开发也未尝不可。后续,会整理下Tiled的用法,和代码层面使用Tiled地图的方法。

以上是对2D分层设计的一些粗略想法,记录自己的思考,并供参考。