技能系统按"元素×形态"组合:火球冰球乘单体群攻——每加一种元素或一种形态,组合数量乘性增长(4 元素 3 形态 12 个类)。桥接模式把两个维度拆成两个独立的函数族:技能持有"元素"引用与"形态"引用,组合在运行时装配——两维各自扩展互不影响,类数量从乘法变加法。
双维度函数族。示例代码如下:
local ELEMENTS = {
fire = function(dmg) return dmg * 1.2 end,
ice = function(dmg) return dmg * 0.8 + 50 end
}
local SHAPES = {
single = function(dmg, targets)
return { { targets[1], dmg } }
end,
aoe = function(dmg, targets)
local out = {}
for _, t in ipairs(targets) do
out[#out + 1] = { t, dmg }
end
return out
end
}
运行时装配。示例代码如下:
local function castSkill(elem, shape, dmg, targets)
return SHAPES[shape](ELEMENTS[elem](dmg), targets)
end
print(#castSkill("fire", "aoe", 100, { "怪1", "怪2", "怪3" }))
输出 3——火系群攻打三目标,元素与形态两个维度独立装配,新增雷系只加一个函数。
组合类版 12 个技能类各写一套逻辑约 480 行;桥接版元素 2 函数加形态 2 函数共约 40 行,新增第三形态只加一个函数——代码从乘法变加法。运行时多一层函数调用,微秒级可忽略。
三个不适用场景:一是只有一个变化维度(只有元素没有形态),拆桥是多此一举;二是两维强耦合(冰系只有单体有意义),桥接强行解耦会造出非法组合;三是维度超过三个——桥接只擅长两维,多维要更重的组合器。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 对比两份任务记录的"共同路线":要求连续的子串可以逐位比对,允许跳过中间步骤的最长公共子序列却没法直…
【游戏】 一、业务场景 新玩家出门就挨打,图文教学没人看,第二天流失率居高不下。训练营上线:三个分阶关卡(走位、连招、节奏)…
【语法】 一、隐蔽陷阱 五只猴子分桃,每来一只把桃分成 5 份多 1 个扔掉再拿走一份。正向从 1 个桃开始试,试到几千个才…
【游戏】 一、业务场景 满级玩家装备毕业后一周流失,进度条走到头没了盼头。渡劫玩法上线:80 级可挑战三重天劫,全通获得渡劫…
【语法】 一、隐蔽陷阱 63 分找零用面额 1、5、10、25 的硬币,贪心取最大面额 6 枚搞定;可换成面额 1、3、4 …
【游戏】 一、业务场景 会长每天手动发福利、清名单、盯报名,帮务占满游戏时间,连着三周漏发福利被帮众催。帮会管家上线:每周 …