地图
地图音乐与环境音乐(ver-20)
在地图配置中直接声明两个资源标识:
local 地图配置 = {
类型 = "地图",
名称 = "封神陵",
地图模板 = "封神陵模版",
地图音乐 = "P失乐园",
环境音乐 = false, -- 设置为已注册的环境音乐资源标识后自动播放
}
return 地图配置
| 字段 | 类型 | 默认/行为 | |
| 地图音乐 | 文本/false/nil | 缺少时停止地图音乐;文本须为已注册的音乐资源标识。 | |
| 环境音乐 | 文本/false/nil | 缺少时停止环境音乐;使用独立音乐对象,可与地图音乐同时循环。 |
引擎实际载入地图成功后处理两路音频,包括默认首地图和已缓存地图的再次进入。两路默认循环,各自与上一次资源标识比较:同标识保持当前位置,变化时先停止旧曲并加载新曲。nil/false/空串关闭对应路;无效类型按关闭处理。未注册标识/缺失文件使该路失败,不能沿用上一张地图的声音。载入地图失败时继续保留原地图及音频。只查询未进入地图的配置或空位不会触发播放。
通过引擎.地图.音乐音效音量与引擎.地图.环境音效音量分别调节。默认 100,0 静音且保持播放进度,跨地图继承。音量持久化由项目自行保存;配置中不支持每图覆盖这两个统一音量。环境音乐适合持续风声、水声等背景循环;原有技能、攻击、界面和天气雷声仍使用普通音效路径。
配套前端 22 张地图已将既有配乐写入game/map/map.lua。新库以这里的字段为准;L地图数据.音乐仅供尚未替换库时的过渡代码,修改它不会影响 ver-20 自动播放。当前未提供环境声素材,22 张地图的环境音乐均为 false;请先注册自己的资源,再填写标识。
验证:真实 Game_Map 注册器已确认保留这两个字段,原生独立静音项目验证自动循环、同文件双路、切图、空配置停播及音量继承。远程资源下载及完整用户游戏听感未实测。
介绍
地图是一个指定宽高和行列的矩形网格,可以配置项制作也可以直接使用地图模板。
local 地图配置 = {
类型 = "地图",
名称 = "新手地图",
格子宽度 = 64,
格子高度 = 32,
格子列数 = 24,
格子行数 = 48,
默认地图 = true,
初始位置 = {x=12,y=24}
}
return 地图配置
local 地图配置 = {
类型 = "地图",
名称 = "泡点图",
默认地图 = true,
初始位置 = {x=22,y=19},
地图模板 = "泡点图",
资源表 = {
{标识="泡点图",文件="dmstore_JD36KaqD2UCbEDOuDt0A"},
}
}
return 地图配置
配置项
| 名称 | 类型 | 必填 | 说明 |
| 类型 | 文本 | true | 固定值: |
| 名称 | 文本 | true | 全局唯一的地图标识 |
| 格子宽度 | 整数 | false | 地图逻辑格子的宽度 |
| 格子高度 | 整数 | false | 地图逻辑格子的高度 |
| 格子列数 | 整数 | false | |
| 格子行数 | 整数 | false | |
| 默认地图 | 逻辑 | false | 是否是游戏中默认加载的首地图 |
| 初始位置 | {x=?,y=?,范围=?} | false | 作为首地图时主角的出生点 |
| 边距 | table | false | {左,上,右,下} 用于扩展或减少黑边,增强角色画面居中细节效果。 例:{-256,-256,256,256} 上下左右都增加256像素黑边 |
| 地图模板 | 文本 | false | 资源标识 |
| 小地图 | 文本 | false | 图片类型的资源标识,会自动显示到[地图框]控件中 |
| 网格显示 | 逻辑 | false | 是否默认显示网格 |
| 网格宽度 | 整数 | false | 默认:1 |
| 网格颜色 | RGBA | false | |
| 环境色 | RGBA | false | 设置一个全局环境色,环境光 |
| 地图物件 | table | false | {
{类型,坐标x,坐标y,资源标识,锚点x,锚点y}, {类型,坐标x,坐标y,资源标识,锚点x,锚点y}, ... } |
| 地图格子 | table | false | {
{格子x,格子y,类型}, {格子x,格子y,类型}, ... } |
| 地图角色 | table | false | {
{名称,阵营,格子x,格子y,范围,数量}, {名称,阵营,格子x,格子y,范围,数量}, ... } |
| 地图门点 | table | false | {
{格子x,格子y,目标地图,目标格子x,目标格子y,角色方向}, {格子x,格子y,目标地图,目标格子x,目标格子y,角色方向}, .. } |
| 地图光源 | table | false | {
{x,y,锚点x,锚点y,水平缩放,垂直缩放,颜色}, {x,y,锚点x,锚点y,水平缩放,垂直缩放,颜色}, .. } |
| 资源表 | table | false | {
{标识="",文件=""}, {标识="",文件=""}, .. } |
| 鼠标事件 | 逻辑 | false | 是否触发系统事件中的 鼠标事件 默认:false |
| 障碍掉宝 | 逻辑 | false | 是否允许道具掉落到障碍里。 默认:false |
| 屏幕位置 | table | false | 将地图显示在指定屏幕位置 |
| 系统事件 | table | false |
环境色
- 颜色值为RGBA,当地图中的组件有光影效果时,A会影响所有光影亮度,
- ver-31:空光影表或缺少颜色的对象不产生灯光,开启环境色不会因此调用
GET_A(nil);完整光影配置的行为不变。
环境色 = RGBA(255,255,255,255), -- 正常
环境色 = RGBA(40,40,40,255), -- 黑灯瞎火
环境色 = RGBA(153,204,230,255), -- 雪山青 雪地、冰川、寒冷环境
环境色 = RGBA(30,30,30,128), -- 当地图中有光影组件的时候,所有光影的亮度降低50%
地图物件
> 地图物件可以是图片,动画,显示在地表或是参与物件排序。
| 名称 | 类型 | 是否必填 | 说明 | |
| 显示位置 | 整数 | true | 0最底层 1地表1层 2地表2层 3物件层(参与地图排序) 4最顶层 | |
| 坐标x | 整数 | true | 地图坐标x | |
| 坐标y | 整数 | true | 地图坐标y | |
| 资源标识 | 文本 | true | 如果是动画需要用逗号分割,指定动作 例:门点动画,默认 | |
| 锚点x | 整数 | true | 如果是动画,这个值为同步编组,相同编组的动画播放速度同步。0:无编组 | |
| 锚点y | 整数 | true | ||
| 水平缩放 | 小数 | false | ||
| 垂直缩放 | 小数 | false | ||
| 名称标识 | 文本 | false | ||
| 默认可视 | 整数 | false | 0:默认不显示 1:默认显示 |
资源表 = {
{标识="门点动画",文件="100/地表特效/atlas.json"},
{标识="美女图",文件="100/美女.jpg"},
{标识="路牌",文件="100/路牌.png"},
{标识="小树",文件="100/小树.png"},
},
地图物件 = {
{0,986,619,"美女图",0,0},{1,1529,780,"路牌",60,105},{1,1410,860,"小树",118,112},{0,1410,860,"门点动画,default",118,112}
},
地图格子
> 设置障碍格子,透明格子信息。
| 名称 | 类型 | 是否必填 | 说明 | |
| 格子x | 整数 | true | 地图格子x | |
| 格子y | 整数 | true | 地图格子y | |
| 类型 | 整数 | true | 1障碍 2透明 3障碍+透明 |
地图格子 = {
{25,19,1},{17,22,2},{18,22,2}
},
地图角色
> 设置地图角色刷新。
| 名称 | 类型 | 是否必填 | 说明 | |
| 名称 | 文本 | true | 角色组件的名称 | |
| 阵营 | 文本 | true | 友方 中立 敌方 | |
| 格子x | 整数 | true | 刷新中心点x | |
| 格子y | 整数 | true | 刷新中心点y | |
| 范围 | 整数 | true | 刷新范围 | |
| 数量 | 整数 | true | 刷新数量 | |
| 等级 | 整数 | false | 角色等级 | |
| 经验 | 数值 | false | 角色经验 | |
| 经验值 | 整数 | false | 被击杀对方可获得的经验值数量 | |
| 角色大小 | 数值 | false | ||
| 方向 | 数值 | false | 出生方向:0-7 | |
| 重生间隔 | 整数 | false | ||
| 血条效果 | table | false | ||
| 主动攻击 | 逻辑 | false | ||
| 巡逻范围 | 整数/table | false | ||
| 移动间隔 | 整数 | false | ||
| 攻击间隔 | 整数 | false | ||
| 视野范围 | 整数 | false | ||
| 显示名 | 文本 | false | ||
| 仇恨联动 | 整数 | false | 格子范围,受伤后会通知联动范围内所有的友方一起攻击仇恨来源 | |
| 状态 | table | false | ||
| 掉落 | table | false | ||
| 附加 | table | false |
地图角色 = {
{名称="将军",阵营="中立",格子x=22,格子y=10,范围=0,数量=1},
{名称="稻草人",阵营="敌方",格子x=22,格子y=10,范围=0,数量=4},
{
名称="稻草人BOSS",
阵营="敌方",
格子x=22,
格子y=10,
范围=0,
数量=1,
角色大小=1.0,
重生间隔=300000,
附加={boss=true},
掉落={"木剑 1/1","金币100 4/1"},
状态={
{"通用增强",{maxhp_百分比=100,攻击_百分比=30,防御_百分比=30}},
{"BOSS增强",{}}
}
},
},
地图门点
> 设置地图自动传送的格子。
| 名称 | 类型 | 是否必填 | 说明 | |
| 格子x | 整数 | true | ||
| 格子y | 整数 | true | ||
| 目标地图名 | 文本 | true | ||
| 目标格子x | 整数 | true | ||
| 目标格子y | 整数 | true | ||
| 传送后角色方向 | 整数 | true |
地图门点 = {
{29,17,"暗殿密室2",24,18,2}
},
地图光源
> 设置地图光源
| 名称 | 类型 | 是否必填 | 说明 | |
| 坐标x | 整数 | true | ||
| 坐标y | 整数 | true | ||
| 锚点x | 数值 | true | ||
| 锚点y | 数值 | true | ||
| 水平缩放 | 数值 | true | ||
| 垂直缩放 | 数值 | true | ||
| 颜色 | RGBA | true | ||
| 名称标识 | 文本 | false | ||
| 默认可视 | 整数 | false | 0:默认不显示 1:默认显示 |
地图光源 = {
{3650,2888,0.5,0.5,1,1,RGBA(255, 255, 0,255)},
{2474,2665,0.5,0.5,2,2,RGBA(255, 255, 255,255)},
},
屏幕位置
- 设置地图在屏幕上的显示区域
- 默认镜头显示在屏幕中心,可以通过镜头微调中心位置。
| 名称 | 类型 | 是否必填 | 说明 | |
| 坐标x | 整数 | true | 屏幕坐标x | |
| 坐标y | 整数 | true | 屏幕坐标x | |
| 宽度 | 数值 | true | 显示宽度 | |
| 高度 | 数值 | true | 显示高度 | |
| 镜头偏移x | 数值 | false | ||
| 镜头偏移y | 数值 | false |
屏幕位置 = {400,0,400,280,-96,0},
藏宝图提前选点(ver-18)
地图通过现有配置注册后,可调用引擎.取地图随机空位('地图名称', {边距=2, 范围={20,30,80,60}}),范围可省略。返回 0 起始的格子 x、y,失败返回 -1、-1、错误文本;不是像素坐标。
未进入地图时读取模板障碍并叠加本配置的地图格子,不调用场景加载/创建事件;无模板地图按行列和手工障碍取点。模板资源须已在正常资源表中声明。地图创建回调中临时设置的障碍无法提前预知,加载后调用则使用当前静态障碍数组。
没有新增地图根配置字段。不会自动刷新 BOSS、预留坐标或保证入口连通,应保存取点结果并在业务真正刷怪时重新校验。范围/边距/失败条件与性能限制见引擎接口。
天气(ver-24)
ver-24 的天气支持发布后统一 PNGZ 文件及标识,继续使用已注册的 HeimeiWeather17 资源。可在下方调用中加入 画质='极高';四天气的粒子、雾团、相关地面容量及流动层在高档基础上翻倍。未指定仍为中档。此选项不改变天气速度、脚印步距或雷暴时序;图集布局、关闭开关和绘制层级沿用原行为。真实 App.exe 独立 24 场景通过,用户完整游戏视觉和帧率仍待复测。
ver-19 修复天气精灵复用后错误显示界面图集:每批绘制绑定当前天气纹理。沿用 Res/HeimeiWeather17/ 和原 设置天气 参数;安装新库并重启生效。旧版故障对照、隔离回归与真实 App.exe 离线验证通过,用户完整游戏画面待复测;详见地图天气。
通过地图创建事件开启天气,先安装 Res/HeimeiWeather17/ 的 8 张图片与 1 个雷声资源,并在资源表声明。新增 atmosphere.png,fog/ground 图集布局已改变。不要每帧重复设置,每次成功设置会替换原天气并清空其积雪进度。
系统事件 = {
创建 = function(地图对象)
地图对象.设置天气 {
类型='下雪', 雪量='大雪', 画质='极高', 密度=0.85, 淡入=1000,
积雪={强度=0.82, 积累速度=1, 停留=15000, 预生成距离=256},
雪幕浓度=0.12, 雪地=false,
脚印={停留=6000}, 阵风=true,
}
end,
}
未新增地图根配置天气字段。参数、资源、画质和验证状态详见地图天气。天气只推进当前可视地图,适配屏幕位置宽高。地表 → 水花/雪面/脚印 → 角色 → 雪幕/底雾/氛围景深 → 团雾/天空天气/闪电 → 普通窗口/UI;天气也可能覆盖地图内部气泡。地面效果固定世界坐标并跟随视距,前景雪幕不是物体顶面积雪。
示例用于普通地面,积雪覆盖达到 0.2 才留印。已有雪地素材时可设雪地=true跳过覆盖判定,但它不负责铺雪。ver-17 的地图共享积雪进度由当前天气持续推进,新区域/瞬移/视距换级继承已有进度;有界网格缓存提前准备视野周围及运动前方,不维护永久全图雪面。清除/切换/重新设置会释放;非当前地图和暂停时进度冻结。
大雾支持根配置颜色=0x5F9641D2表现绿色瘴气,仍需项目另做毒伤逻辑;四种天气都可选氛围景深={远景颜色=0x376F94FF, 远景浓度=0.55, 近景压暗=0.16, 边缘压暗=0.18, 清晰范围=0.7}。这是 2D 气氛叠层,不读取真实深度、不改环境色或黑白状态、不识别屋顶/宝箱轮廓。
当前脚印只跟踪主角,不自动识别屋顶、室内或地面材质,可用最多 32 个世界像素矩形组成的地面区域限制地面效果,不能限制天空天气。
更新记录
| 日期 | 版本 | 简易记录 | |
| 2026-09-13 | ver-13 | 补充地图创建事件设置天气的用法及视口、资源和显示层级条件。 | |
| 2026-09-13 | ver-14 | 更新天气创建示例、新版资源和地面/天空分层;说明雪地标记、短暂主角脚印与地面区域边界。 | |
| 2026-09-13 | ver-15 | 更新专用资源和世界坐标雾/连续沙幕说明;雷暴明暗为私有叠层,不修改地图原有环境色与黑白画面,薄雪和脚印视觉调整。 | |
| 2026-09-13 | ver-16 | 同步新版资源、水花与浓雾控制、首版黄沙默认行为、连续积雪及其查询和释放边界。 | |
| 2026-09-13 | ver-17 | 同步移动补雪、地图共享积雪进度与预生成、雪幕和可选 2D 氛围景深;新增资源、绿色雾示例及层级/缓存边界。 | |
| 2026-09-13 | ver-18 | 说明未进入地图的模板/配置障碍取点、地图注册及创建回调边界;不增加根配置或自动刷怪行为。 | |
| 2026-09-14 | ver-20 | 地图配置新增地图音乐和环境音乐字段,载入成功后分路自动循环、同曲续播和空配置停止。 | |
| 2026-09-16 | ver-24 | 补充 PNGZ 发布兼容、极高天气创建示例以及数量/容量和验证边界。 |
系统事件
🔹 创建
地图创建后触发
| 回调参数 | 类型 | 说明描述 |
| 地图对象 | 地图对象 |
示例
系统事件 = {
创建 = function (地图对象)
调试输出(地图对象.名称, 地图对象.格子行数,地图对象.格子列数)
end
}
🔹 鼠标事件
- 地图上发生鼠标事件时触发。需要开启配置项中的
鼠标事件。 按下事件时 返回true可以阻止主角移动。
| 回调参数 | 类型 | 说明描述 | ||||||||||||||||||
| 地图对象 | 地图组件 | |||||||||||||||||||
| 事件 | 文本 | 按下 弹起 移动 滚轮 | ||||||||||||||||||
| 信息 | table |
|
示例
系统事件 = {
鼠标事件 = function (地图对象,事件,信息)
if(地图对象.附加.镜头 == nil) then
地图对象.附加.镜头 = {x=地图对象.主角.x,y=地图对象.主角.y,_x=信息.屏幕坐标.x,_y=信息.屏幕坐标.y}
引擎.地图.镜头对象 = 地图对象.附加.镜头
end
local 镜头信息 = 地图对象.附加.镜头
if (事件 == "按下") then
if (信息.键值 == 1) then -- 右键
镜头信息.开始移动 = true
镜头信息._x = 信息.屏幕坐标.x
镜头信息._y = 信息.屏幕坐标.y
elseif (信息.键值 == 0) then -- 左键
local 格子状态 = 地图对象.地图格子(信息.地图格子.x,信息.地图格子.y)
格子状态 = 格子状态 == 1 and 0 or 1
地图对象.地图格子(信息.地图格子.x,信息.地图格子.y,格子状态)
end
local 焦点角色 = 信息.焦点
if (焦点角色) then
调试输出("焦点角色",焦点角色.名称)
-- 焦点角色.自动战斗 = false
-- 焦点角色.主动攻击 = false
-- 焦点角色.移动控制 = true
end
return true -- 拦截事件
elseif (事件 == "弹起") then
镜头信息.开始移动 = false
elseif (事件 == "移动") then
if (镜头信息.开始移动) then
local px = 信息.屏幕坐标.x - 镜头信息._x
local py = 信息.屏幕坐标.y - 镜头信息._y
镜头信息.x = 镜头信息.x - px * 地图对象.视距
镜头信息.y = 镜头信息.y - py * 地图对象.视距
镜头信息._x = 信息.屏幕坐标.x
镜头信息._y = 信息.屏幕坐标.y
地图对象.镜头平滑移动 = true
end
elseif (事件 == "滚轮") then
if (信息.键值 > 0) then -- 上滚动
地图对象.视距 = math.max(0.5,地图对象.视距 - 0.2)
else
地图对象.视距 = math.min(6,地图对象.视距 + 0.2)
end
地图对象.镜头平滑移动 = false
end
end
}
🔹 自定义事件
是指通过Api 加入事件 创建的事件。
| 回调参数 | 类型 | 说明描述 |
| 地图对象 | 地图对象 | |
| 事件附加 | table | 是指通过Api [加入事件]中传递进来的 附加信息 |
| dt | 数值 | 事件执行的实际间隔时间 |
| time | 数值 | 事件执行的总时间 |
示例
系统事件 = {
创建 = function(地图对象)
地图对象.加入事件("自动刷怪",{名称="稻草人",数量=1},500,false)
end,
自动刷怪 = function (地图对象,附加,dt,time)
地图对象.创建角色(附加.名称,20,20,"敌方",6,附加.数量);
end,
}
- 2026-09-19,ver-31:地图绘制跳过缺少颜色的光影配置,修复开启环境色后的 GET_A(nil);1,078 项定点隔离检查通过,用户前端复测待确认。
