2D 无限地图 Tilemap 实战指南
精华修改于03/17316 浏览开发心得
2D 无限地图 Tilemap 实战指南
从一张图到无限世界 —— 如何用 AI 生图 + Tile 平铺 + 装饰散布,搭建一个可无限漫游的 2D 游戏地图。

为什么需要 Tilemap?
很多 2D 游戏一开始用一张静态背景图铺满屏幕就够了。但当你想做"无限地图"(比如吸血鬼幸存者那种可以自由走动的大世界)时,一张固定背景就不行了——玩家走到哪,地面就得铺到哪。
Tilemap 的核心思想很简单:用一小块地砖(Tile)反复平铺,覆盖整个世界。就像现实中的地砖一样,一块 128x128 像素的贴图,就能铺出无限大的地面。
整体工作流(4 步)
第 1 步:生成地砖贴图(AI 生图)
↓
第 2 步:实现 Tile 平铺渲染(相机跟随 + 仅渲染可见区域)
↓
第 3 步:生成装饰素材(草、石头等)
↓
第 4 步:随机散布装饰物(基于区块的伪随机)
第 1 步:生成地砖贴图
关键原则
地砖是要无缝平铺的,所以它不能有明显的图案、边缘或方向感,否则拼在一起会出现重复感很强的"壁纸效应"。
提示词思路
好的地砖提示词需要满足以下要素:
色调统一:整体一个色系,不要太花
细微变化:有轻微噪点/色差,不要纯色块
无明显图案:不要裂缝、碎石、花纹等强特征
无边缘:不能有明显的边界线
平坦:俯视角度,不要有立体感
提示词模板
[色调]地面纹理,细微颗粒噪点,轻微色差变化,
无裂缝无碎石无图案无边缘,简洁平坦,游戏地面贴图
实际案例
这个项目是暗黑修仙风格,最终用的提示词是:
深灰紫色地面纹理,细微颗粒噪点,轻微色差变化,无裂缝无碎石无图案无边缘,简洁平坦,游戏地面贴图
尺寸选择 128x128,这是个常用的 tile 尺寸——太小会模糊,太大会浪费内存。

迭代经验
第一次生成的贴图往往不合适,需要迭代调整:
太复杂(裂缝、碎石):加"无裂缝无碎石",去掉"废墟"等词
太单调(纯色块):加"细微颗粒噪点,轻微色差变化"
有方向感(斜纹):加"无图案无边缘"
颜色不搭:先截图看游戏现有风格,调整色调描述
一般 2-3 轮就能找到满意的效果。
第 2 步:Tile 平铺渲染
核心思路
不需要真的创建一张巨大的地图图片。每一帧只需要:
- 算出相机当前能看到哪些 tile(根据相机位置和屏幕大小)
- 只渲染这些 tile(通常也就十几块)
这样无论世界多大,每帧渲染的 tile 数量都是固定的,性能完全没问题。
两种方法结合使用最稳妥。
相机跟随
要实现无限地图,还需要一个"相机"的概念:
玩家移动时,相机跟着玩家走
所有东西(敌人、道具、特效)的世界坐标减去相机坐标,就得到屏幕上的显示位置
公式就一行:屏幕坐标 = 世界坐标 - 相机坐标
第 3 步:生成装饰素材
光有地砖还不够,地面看起来会很单调。加上一些随机散布的小装饰(草丛、石头、苔藓),画面立刻就丰富起来。
装饰素材要求
透明背景:必须是 PNG 透明底,能叠在地砖上
俯视角度:和地面视角一致
尺寸小:64x64 够用,渲染时可以缩放
风格统一:和地砖、游戏整体风格搭配
3-5 种变化:至少准备几种不同的装饰,避免单调
提示词模板
草类:
俯视角度,一小簇[色调]杂草,[风格]风格,
深色调,透明背景,游戏2D装饰素材
石头类:
俯视角度,[数量]块[色调]碎石/石碑残片,
[风格描述],透明背景,游戏2D地面装饰素材
实际案例
这个项目生成了 4 种装饰:
暗色杂草:俯视角度,一小簇暗绿色杂草,枯黄边缘,修仙废墟风格,深色调,透明背景,游戏2D装饰素材,像素精灵
灵气苔藓:俯视角度,一小片深紫绿色苔藓地衣,微微发光边缘,暗黑仙侠风格,透明背景,游戏2D地面装饰
碎石块:俯视角度,两三块深灰色碎石,棱角分明,表面粗糙,暗色调,透明背景,游戏2D地面装饰素材
残碑断石:俯视角度,一块破损的暗灰色石碑残片,上面隐约有古老符文,修仙废墟风格,透明背景,游戏2D装饰
第 4 步:随机散布装饰物
装饰物需要"看起来随机,但每次经过同一位置看到的东西一样"。这就是确定性伪随机。
区块系统
把世界分成固定大小的区块(比如 256x256 像素一块),每个区块根据自己的坐标算出一个固定的随机种子,然后用这个种子生成几个装饰物的位置和类型。
好处:
无需存储:装饰物的位置是算出来的,不用保存到内存
确定性:同一个区块永远生成相同的装饰,玩家来回走不会变
仅渲染可见:只计算屏幕范围内的区块,性能无压力
每个装饰物的随机属性
位置:区块内的 X、Y 偏移
图片类型:从素材列表中随机选一个
透明度:0.4~0.8 之间随机,增加自然感
密度控制
每个区块放多少个装饰物取决于你想要的效果:
稀疏:每区块 1-2 个,效果为荒野、沙漠感
适中:每区块 3-4 个,效果为自然、平衡
密集:每区块 5-8 个,效果为森林、草地感
参数速查表
Tile 尺寸:128x128(地砖图片像素大小)
装饰尺寸:64x64(装饰图片像素大小)
装饰渲染尺寸:32x32(实际显示大小,可缩放)
区块大小:256x256(装饰散布的区块单位)
每区块装饰数:3(根据风格调整)
接缝补偿:1px(tile 每边扩大的像素数)
常见问题
Q: Tile 拼接有明显的网格线?
先铺一层和 tile 颜色接近的底色,再让每块 tile 渲染时扩大 1-2 像素。两者结合可以完全消除接缝。
Q: 装饰物每次进游戏位置都变了?
检查随机种子是不是用了区块坐标来生成。不要用 math.random()
,要用基于坐标的确定性伪随机算法(如 LCG)。
Q: 走到很远的地方会卡吗?
不会。因为每帧只渲染摄像机可见范围内的 tile 和装饰,跟世界大小无关。
Q: AI 生成的 tile 拼在一起重复感很强怎么办?
提示词里去掉所有强特征(裂缝、图案、花纹)
只保留色调和轻微噪点
越简洁的 tile 拼在一起越自然
Q: 想要不同区域有不同地面怎么办?
可以为每个区域准备不同的 tile 和装饰素材,根据玩家所在区域切换即可。整体架构不需要改,只是换一套贴图。
这套方案不需要地图编辑器,不需要预制大图,生成的世界可以无限大,而且性能开销极小。非常适合吸血鬼幸存者、弹幕天国这类需要大地图自由移动的游戏。



