【游戏功能】
一、先抛一个坑
攻城战里坦克的攻城锤为什么不是从怀里掏出来的,而是从天上砸下来的?因为攻城锤太重了——正常的举起来挥过去根本来不及,必须是"从天而降"才够震撼。但天降系的表现有一个命门:落点必须有预警。没有预警的天降锤就是一个砸人的铁块,玩家既躲不开也看不清,这不是打击感,这是恶意。
二、底层原理
天降锤的三段:影子预警零点九秒、锤体坠落零点二秒、插地余韵两秒。影子从角色大小逐渐扩大到锤头横截面,坠落的锤体带竖直拖尾,插地后震屏加冲击环。在幂尔框架里,SL:ScheduleOnce 驱动三段串联,SL:RegisterLuaNetMsg 接收服务端命中确认。
fx-giantsword
三、正确写法
local SkyHammer = {}
local CONST = { KEY = "SkyHammer", WARN = 0.9, FALL = 0.22, STUCK = 2.2 }
function SkyHammer.Cast(myID, tx)
SkyHammer._tx = tx
SkyHammer._shadow = CreateShadow(tx, CONST.WARN)
SL:ScheduleOnce(function()
SkyHammer:Falling()
end, CONST.WARN * 1000)
end
function SkyHammer:Falling()
local hammer = CreateFallingHammer(self._tx)
hammer:OnLand(function()
SpawnShockRing(self._tx)
ScreenShake(0.5)
for _, m in ipairs(GetNearbyMobs(self._tx, 90)) do
SL:SendLuaNetMsg(CONST.MSG_ID, m, 0, 0,
SL:JsonEncode({ key = CONST.KEY, op = 2, hit = m }))
end
SL:ScheduleOnce(function()
hammer:FadeOut()
end, CONST.STUCK * 1000)
end)
end
return SkyHammer
四、四个必须钉死的细节
五、心法:预告画多大,打击就多大
攻城锤教的通用课是"预警即承诺":影子是系统的承诺——影子画多大就打多大。承诺必须兑现,否则玩家的信任就崩了。一切范围技能都适用这条律:预警的范围就是判定的范围,不多不少。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 heat = heat + 1; if heat = 3 then rest = 1.6 ——两行管刀温的代码…
【游戏功能】 兄弟俩打一只狼,哥哥攒了三层劲自己放,一层加二十五;弟弟站在旁边干瞪眼——直到有人把劲递了过去:同样的三层,过…
【游戏功能】 有篇纠错单写得像小说:同一只狼,有人打它半小时血线稳如老狗,有人三分钟放倒——排查到最后发现,会打的那个从头到…
【游戏功能】 追着你满场跑的狼怪,为什么绕过一根石柱就懵在原地?脱影的答案藏在柱子背后:视线被石柱掐断一秒二,它脑子里"你"…
【游戏功能】 巡查群里有人喊邪门:同一套连招,昨天刀刀见血,今天刀刀被挡——查录像看到第三遍才看懂:狼怪学会了。他的出刀间隔…
【游戏功能】 if hand == last then acid = acid + 1 ——一行数手的判定,攒出了换手全部的…