地图
介绍
地图是一个指定宽高和行列的矩形网格,可以配置项制作也可以直接使用地图模板。
基础
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 | 是否是游戏中默认加载的首地图 |
初始位置 | table | false | {x,y} 作为首地图时主角的出生点 |
边距 | table | false | {左,上,右,下} 用于扩展或减少黑边,例:{0,0,0,-200} |
地图模板 | 文本 | 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会影响所有光影亮度,
环境色 = 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 | 出生方向:0-7 |
重生间隔 | 整数 | false | |
血条效果 | table | false | |
主动攻击 | 逻辑 | false | |
巡逻范围 | 整数/table | 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},
系统事件
🔹 创建
地图创建后触发
回调参数 | 类型 | 说明描述 |
地图对象 | 地图对象 |
示例
系统事件 = {
创建 = 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,
}