App.lua
介绍
App.lua是每个项目的入口文件,游戏的启动配置项在这里填写。
配置项
名称 | 类型 | 必填 | 说明 |
游戏标题 | 文本 | false | windows窗口标题 |
屏幕宽度 | 整数 | false | 屏幕宽度 |
屏幕高度 | 整数 | false | 屏幕高度 |
背景颜色 | RGBA | false | 默认:0 |
屏幕适配 | 整数 | false | |
资源表 | table | false | { {标识="",文件=""}, {标识="",文件=""}, } |
默认字体 | table | true | |
信息框 | table | false | |
技能气泡 | table | false | |
道具气泡 | table | false | |
状态气泡 | table | false | |
掉落物 | table | false | |
状态图标 | table | false | |
控件皮肤 | table | false | |
扩展属性 | table | false | |
扩展组件 | table {} | false | |
扩展脚本 | table {} | false | |
装备套装 | table {} | false | |
系统事件 | table | false |
屏幕适配
- 0:无适配
- 1:窗口可以拉伸 画面缩放
- 2:窗口可以拉伸 画面同步屏幕宽高
扩展属性
引擎内置了6个属性:hp
mp
maxhp
maxmp
移动速度
攻击速度
除此之外你可以自己扩展需要的属性,扩展属性只能为数值型。
扩展属性 = {攻击=0,防御=0}, -- 游戏中有了 攻击,防御
提示
扩展属性会自动应用于整个游戏系统,道具,角色,技能 等等各种组件中都自动扩展拥有了这些属性。
扩展组件
- DM3是一个组件化的引擎,通过即插即用的各种组件积木式产生游戏。
- 目前的组件种类有
角色
地图
道具
技能
状态
窗口
触发器
- 组件是一个个配置项文件,后缀名为.lua,需要保存到工程目录下,然后加入到
扩展组件
。
扩展组件 = {
"UI/底部UI.lua",
"UI/角色窗口.lua",
"DB/Npc/主角.lua",
"DB/Npc/稻草人.lua",
"DB/Map/泡点图.lua",
"DB/Item/八荒刀.lua",
...
...
},
提示
阅读文档,编写各种类型的组件。
装备套装
- 一个套装配置数组,部件中道具对象可以在属性中可以取出[套装]属性。
名称 | 类型 | 说明 |
---|---|---|
名称 | 文本 | 套装的唯一名称 |
部件 | table {} | 道具名称数组 |
效果 | table {} | 数组索引对应激活几个部件的效果 |
装备套装 = {
{
名称 = "全村的希望",
部件 = {"黄金手镯","黄金戒指","黄金项链"},
效果 = {
{}, -- 1件
{{"maxhp",20},{"maxmp",20}}, -- 2件
{{"移动速度",20},{"攻击速度",20}} -- 3件
}
},
{
名称 = "圣战套",
...
..
}
},
扩展脚本
- 自定义的Lua脚本,没有格式要求。DM3使用Lua5.4,没有特殊限制,你可以用来封装自己的系统或者常用的公共函数。
- 扩展脚本会在游戏组件初始化之前载入执行。依次执行完成后触发 系统事件 🔹 启动
扩展脚本 = {
"DB/系统.lua",
...
...
},
系统事件
🔹 启动
游戏启动后,系统载入所有扩展脚本
后最先触发的回调。 通常用于游戏开始前的各种准备
🔹 游戏开始
游戏组件载入完成后激活此事件。
🔹 焦点变化
游戏窗口焦点发生改变时触发
回调参数 | 类型 | 说明描述 |
屏幕焦点 | 逻辑 | 获得焦点:true 丢失焦点:false |
示例
系统事件 = {
焦点变化 = function (屏幕焦点)
调试输出(屏幕焦点)
end,
}
🔹 宽高变化
屏幕适配 = 2
时,游戏窗口宽高改变时触发
回调参数 | 类型 | 说明描述 |
宽度 | 整数 | |
高度 | 整数 |
示例
系统事件 = {
宽高变化 = function (宽度,高度)
local 底部UI = 引擎.窗口.底部UI
底部UI.x = (宽度 - 底部UI.宽度) * 0.5 // 1
底部UI.y = 高度 - 底部UI.高度
end,
}
🔹 键盘按下
按键按下触发
回调参数 | 类型 | 说明描述 | |||||||||||||||
按键信息 | table |
|
示例
系统事件 = {
键盘按下 = function (按键信息)
调试输出(按键信息)
end,
}
🔹 键盘弹起
按键弹起时触发
回调参数 | 类型 | 说明描述 | |||||||||||||||
按键信息 | table |
|
示例
系统事件 = {
键盘弹起 = function (按键信息)
调试输出(按键信息)
end,
}
🔹 超链接
丰富文本的超链接事件会统一回调到此处。
回调参数 | 类型 | 说明描述 |
事件 | 文本 | 热点 点击 |
链接 | 文本 / table {} | #@中的 触发标识 |
x | 数值 | 链接屏幕坐标x |
y | 数值 | 链接屏幕坐标y |
文本框对象 | 文本框 | 这个事件从哪里来 |
示例
系统事件 = {
超链接 = function (事件,链接,x,y,文本框)
if (事件 == "点击") then
调试输出(链接)
end
end,
}
🔹 道具气泡提示
道具气泡弹出时触发,通常用户动态修改气泡内容
回调参数 | 类型 | 说明描述 |
道具对象 | 道具对象 | |
格子对象 | 格子对象 | 道具所在的格子 |
装备对比 | 逻辑 | 是否有装备对比行为 |
示例
系统事件 = {
道具气泡提示 = function (道具对象,格子对象,装备对比)
local 主角对象 = 引擎.地图.主角
local 需要等级 = 道具对象.等级
local 等级颜色 = "#W"
if (需要等级 > 主角对象.等级 ) then
等级颜色 = "#R"
end
local 富文本 = "#z(140,0,1)\n#z(2,-12)#f(宋体14粗)#c(".. 道具对象.颜色 ..")".. 道具对象.显示名
if (装备对比) then
-- 显示一个已装备图标
富文本 = 富文本 .. "\n#p(已装备图标,98,-16)\n#z(0,-8)"
else
富文本 = 富文本 .. "#z(0,10,1)\n"
end
富文本 = 富文本 .. "#p(默认皮肤|格子底图)#p(".. 道具对象.图标 ..",-44,0,42,42)#f(宋体12)#W#z(4,-42)\n"
富文本 = 富文本 .. "类型:" .. 道具对象.子类 .. "\n" .. 等级颜色 .. "等级:" .. 需要等级 .. "\n#W限制:无\n#z(0,0)"
if (道具对象.分类 == "装备") then
local 附加属性 = 道具对象.附加
if(道具对象.攻击 > 0 ) then
富文本 = 富文本 .. "\n".. (附加属性.攻击 > 0 and "#c(0x66CC00FF)" or "#W") .. "攻击 " .. 道具对象.攻击
end
if(道具对象.防御 > 0) then
富文本 = 富文本 .. "\n".. (附加属性.防御 > 0 and "#c(0x66CC00FF)" or "#W") .. "防御 " .. 道具对象.防御
end
if(道具对象.maxhp > 0) then
富文本 = 富文本 .. "\n".. (附加属性.maxhp > 0 and "#c(0x66CC00FF)" or "#W") .. "生命 " .. 道具对象.maxhp
end
if(道具对象.maxmp > 0) then
富文本 = 富文本 .. "\n".. (附加属性.maxmp > 0 and "#c(0x66CC00FF)" or "#W") .. "法力 " .. 道具对象.maxmp
end
if(道具对象.攻击_百分比 > 0 ) then
富文本 = 富文本 .. "\n".. (附加属性.攻击_百分比 > 0 and "#G" or "#W") .. "攻击 +" .. 道具对象.攻击_百分比 .. "%"
end
if(道具对象.防御_百分比 > 0 ) then
富文本 = 富文本 .. "\n".. (附加属性.防御_百分比 > 0 and "#G" or "#W") .. "防御 +" .. 道具对象.防御_百分比 .. "%"
end
if(道具对象.maxhp_百分比 > 0) then
富文本 = 富文本 .. "\n".. (附加属性.maxhp_百分比 > 0 and "#G" or "#W") .. "生命 +" .. 道具对象.maxhp_百分比 .. "%"
end
if(道具对象.maxmp_百分比 > 0) then
富文本 = 富文本 .. "\n".. (附加属性.maxmp_百分比 > 0 and "#G" or "#W") .. "法力 +" .. 道具对象.maxmp_百分比 .. "%"
end
-- 有套装属性
if(道具对象.套装) then
local 套装名称 = 道具对象.套装.名称
local 套装部件 = 道具对象.套装.部件
local 套装效果 = 道具对象.套装.效果
local 激活数量 = 道具对象.套装.激活数量
local 部件数量 = #套装部件
富文本 = 富文本 .. "\n\n#Y" .. 套装名称 .. " (" .. 激活数量 .. "/" .. 部件数量 .. ")"
for n=1,#套装部件 do
富文本 = 富文本 .. "\n".. (套装部件[n].数量 > 0 and "#c(255,200,0,255)" or "#H") .. 套装部件[n].名称
end
for n=1,#套装效果 do
if(#套装效果[n] > 0) then
富文本 = 富文本 .. "\n\n#z(0,0)" .. (激活数量 >= n and "#c(255,200,0,255)" or "#H") .. "[" .. n .. "]:#z(4,-14)"
for i=1,#套装效果[n] do
local 属性名称 = 套装效果[n][i][1]
local 属性值 = 套装效果[n][i][2]
if (属性名称 == "maxhp") then
属性名称 = "生命"
elseif (属性名称 == "maxmp") then
属性名称 = "法力"
end
富文本 = 富文本 .. "\n".. 属性名称 .. " +".. 属性值
end
end
end
end
elseif (道具对象.分类 == "道具") then
if (道具对象.子类 == "消耗") then
if(道具对象.hp > 0 ) then
富文本 = 富文本 .. "\n".. "#GHP + " .. 道具对象.hp
end
if(道具对象.mp > 0 ) then
富文本 = 富文本 .. "\n".. "#GMP + " .. 道具对象.mp
end
end
end
富文本 = 富文本 .. "\n\n#z(0,0)#br(140)#H普普通通的".. 道具对象.显示名 .. "#z(0,2,1)"
道具对象.气泡提示 = 富文本
end,
}
🔹 技能气泡提示
技能气泡弹出时触发,通常用户动态修改气泡内容
回调参数 | 类型 | 说明描述 |
技能对象 | 技能对象 |
示例
系统事件 = {
技能气泡提示 = function (技能对象)
-- 只有已经添加的技能才有进度这个属性 通过判断进度可以区分是否是已经学习的技能
if (技能对象.进度 == nil) then
技能对象.气泡提示 = "#H#f(宋体14粗)".. 技能对象.显示名 .."\n#f(宋体12)\n未掌握"
return
end
local 富文本 = "#G#f(宋体14粗)" .. 技能对象.显示名 .. "\n#W#f(宋体12)\nMP:" .. 技能对象.mp .. "\nCD:" .. math.round(技能对象.间隔 / 1000,1) .. "秒\n\n#W等级:" .. 技能对象.等级
技能对象.气泡提示 = 富文本
end,
}
🔹 系统提示
用于拦截捕获系统默认提示
回调参数 | 类型 | 说明描述 |
编号 | 整数 | 1:使用技能时,技能冷却中 2:使用物品时,道具冷却中! 3:使用物品时,等级不足! 4:拾取物品时,包裹已满! |
提示内容 | 文本 | 默认内容 |
示例
系统事件 = {
系统提示 = function (编号,提示内容)
调试输出(编号,提示内容)
return true -- 拦截
end
}
🔹 自定义事件
是指通过Api 加入事件 创建的事件。
回调参数 | 类型 | 说明描述 |
事件附加 | table | 是指通过Api [加入事件]中传递进来的 附加信息 |
dt | 数值 | 事件执行的实际间隔时间 |
time | 数值 | 事件执行的总时间 |
示例
系统事件 = {
游戏开始 = function()
引擎.加入事件("系统时钟",{},1000,false)
end,
系统时钟 = function (tbl,dt,time)
调试输出(dt,time)
end,
}