【游戏功能】
一、一笔判生死的墨迹
书法系技能上线测试,美术交来的墨迹特效是一整张黑色贴图从左飞到右,测试评语"像块抹布"。问题出在把墨迹当成了"一张图"——真正的墨是有笔触的:起笔重、行笔快、收笔带飞白,粗细在一笔之内连续变化。手绘一道墨迹刃浪,用的不是贴图,是一条渐细的贝塞尔曲线加几笔断续的飞白,成本不到一张贴图,观感翻三倍。
二、机制原理:笔触即刃
笔阵的每一道墨迹就是一个飞行体:主体是二次贝塞尔曲线画出的墨色笔触——起笔端粗、收笔端细,行笔路径带一点随机的弧度起伏,模拟腕上功夫;飞白是笔触中后段的几条断续细线,干笔扫过的枯涩感全在这几笔断续里。多道墨迹按零点一一秒的间隔连发,高度在头胸带内错层排布,像被一支无形巨笔横扫写过。命中判定与视觉一致:墨迹的粗段扫过目标躯干即结算,落点炸出墨点飞溅,溅出的墨点带重力落地。
fx-inkstorm
三、正确写法:墨迹刃浪(幂尔版)
local InkStorm = {}
local CONST = { MSG_ID = 12120, KEY = "InkStorm", COUNT = 5, GAP = 0.11, AIM_H = 64 }
function InkStorm.Cast(myID)
local myX = SL:GetValue("ACTOR_POSITION_X", myID)
local myY = SL:GetValue("ACTOR_POSITION_Y", myID)
for i = 1, CONST.COUNT do
SL:ScheduleOnce(function()
SL:SendLuaNetMsg(CONST.MSG_ID, 0, 0, 0,
SL:JsonEncode({ key = CONST.KEY, op = 1, actorID = myID,
slot = i - CONST.COUNT / 2 }))
end, (i - 1) * CONST.GAP * 1000)
end
end
-- 墨迹飞行体: 渐细笔触
function InkStorm.SpawnStroke(x, y, slot)
local stroke = CreateInkStroke(x, y + slot * 14)
stroke:SetWidth(10 - math.abs(slot) % 3 * 2.4) -- 粗细错层
stroke:SetSpeed(520)
stroke:SetFade(0.5)
stroke:OnHit(function(target) -- 粗段扫过躯干
target:OnHit(22)
if self._splash then SpawnInkDrops(target, 5) end
end)
end
return InkStorm
四、四个必须钉死的细节
五、心法:一个飞行体就是一次运笔
把每个投射物当成一次运笔来设计:起笔的重量、行笔的速度曲线、收笔的余韵。刀气是横扫的一笔,箭矢是直线的一笔,雷光是竖劈的一笔——投射物系统的美工规范可以统一成一本"字帖",新技能照帖运笔,整个项目的投射物就自带同门武功的气韵。
墨迹这族还有个低成本的高阶玩法:落墨留痕。每道墨迹命中后在地面留一小片淡墨渍,战斗结束前不消失,打完一场地上全是纵横的墨痕——战场会自己讲故事。留痕的工程成本就是一个不清理的地面层列表,配合场景切换统一回收,账还是那本账,只是多记了几笔长期资产。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一、一个被投诉的手感 格挡类玩法首测,最扎心的反馈是:"我按了格挡,还是掉血,那我按它干嘛?"复盘发现三档判定…
【游戏功能】 一、一个只写在面板上的攻速 血怒类增益技能初版,面板攻速翻倍,实际战斗里玩家毫无感觉——动作动画的播放速度压根…
【游戏功能】 一、一行代码拆解 ctx.ellipse(0, 0, 26 pul, 44 pul, 0, 0, 7) ——传…
【游戏功能】 一、先抛一个坑 地刺为什么从脚下开始、沿着一条线追到敌阵?做成目标脚下原地一丛刺不行吗?行,但那是控制技。地刺…
【游戏功能】 一、先抛一个坑 三段连斩的第一版做出来,策划看完只说了一句:"这是三个技能吧?"三刀的斩痕分别从上斜、下斜、平…
【游戏功能】 一、一个只有正前方能躲的技能 月刃横扫类范围技能第一版,判定画的是以角色为圆心的整圆,视觉画的是身前一扇新月。…