沃玛森林的火龙定时沿固定路线喷火,学员写轨迹时把"当前步数"存进普通局部变量——周期触发的回调每次执行都是独立调用,局部变量每次从 0 开始,火龙永远喷同一个点。也有人把步进计数直接塞进不落库的开关变量,重启后轨迹从头再来,玩家摸清了规律站在原地白嫖安全区。错误场景:
local step = 0
local function ontimerex31()
step = step + 1
local px = 40 + step
genmon(4, px, 60, "火焰地带", 1, 1, 0)
end
ontimerex31 每次进来的 step 都是 0,加完还是 1,喷火点不动。
步进计数落库,回调里读、加、写三步走,轨迹由计数值推算坐标。火龙绕圈喷火的规范写法。示例代码如下:
local STEPS = 40
local CX, CY, RADIUS = 40, 60, 10
local function ontimerex31()
local step = (tonumber(getsysvar("FireStep")) or 0) + 1
setsysvarex("FireStep", step, 1)
local angle = step * 9
local px = CX + math.floor(RADIUS * math.cos(math.rad(angle)))
local py = CY + math.floor(RADIUS * math.sin(math.rad(angle)))
genmon(4, px, py, "火焰地带", 1, 1, 0)
end
每步转 9 度,40 步转完 360 度一圈;计数值落库后重启也接着上次的步数继续,轨迹不被打断。示例代码如下:
local function startFire()
setontimerex(31, 800)
end
三步验证:连续触发 40 次,火焰落点应绕圆心一圈回到起点附近;中途手动把 FireStep 清零,观察轨迹从头再来的现象,理解计数值与轨迹的绑定关系;把步长从 9 度改成 18 度,一圈变成 20 步,验证参数化生效。
反向旋转只需把角度取负:angle 用负的步进角,轨迹顺时针逆时针一键切换。示例代码如下:
local angle = -step * 9
再进一步可以两层轨迹叠加(外圈顺时针内圈逆时针),火龙的威胁范围立刻立体起来。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
一、一行代码拆解:local function roll() 里写 local cfg = {500, 200, 50} —…
一、隐蔽陷阱:国库金币累加到 2^53(约 9007199254740992)之后再加 1,数值纹丝不动——双精度浮点在该区…
一、线上事故:仓库存取逻辑散在 6 个脚本,各自写各自的 getsysvar 键名,某次改名漏改 2 处,300 件裁决之杖…
一、抛坑提问:500 件战备装备一次下发必卡,按每页 20 件切片,边界怎么算才不出空页和重页?起点 (page-1) 20…
一、抛坑提问:校验失败在工具函数里 error,日志却指向工具函数那一行,排查总要翻两层。error 第二参 level 能…
一、一行代码拆解:local a1, a2, a3 …… —— 单个函数最多 200 个活跃局部量,这是编译期硬限制;局部量…