CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
入门夯实996引擎for循环控制变量

【入门夯实】for控制变量:循环内的赋值为何不生效

2026-09-25 13:18 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本入门夯实996引擎Luafor循环控制变量

学员常见误区

在数值 for 循环体内给循环变量重新赋值,以为能跳过某些迭代——实际数值 for 的循环变量是内部计数器的影子:每轮开始时从内部计数器重新取值,循环体内的赋值只影响当轮余下语句,下一轮立刻被内部计数器覆盖。想靠改 i 跳步的写法静默失效。错误场景:

lua
for i = 1, 6 do
    if i == 3 then
        i = i + 2
    end
    print(i)
end

输出是 1 2 5 4 5 6——第 3 轮的打印值被改成了 5,第 4 轮又回到内部计数器的 4:改了当轮,改不了序列。

正确姿势

需要跳步用 step 参数,需要条件跳过用标志位——流程控制交给 for 头部声明。规范写法。示例代码如下:

lua
for i = 1, 6, 2 do
    print(i)
end

输出 1 3 5——步长由 step 表达,循环体只做业务不做流程。

引擎验证

三步验证:跑错误版看清"当轮被改、下轮复原"的现象;改成 step 版输出 1 3 5;再试负步长(for i = 6, 1, -2 输出 6 4 2)——发放 6 件祖玛掉落时倒序步长同样由头部声明,循环体内无人能改。

举一反三

while 循环的控制变量相反,赋值一律有效——它没有内部计数器。示例代码如下:

lua
local i = 1
while i <= 6 do
    if i == 3 then
        i = i + 2
    end
    print(i)
    i = i + 1
end

输出 1 2 5 6——while 里改 i 就真的跳过了 3 和 4。两种循环的差别在控制权归属:for 的序列归引擎,while 的序列归代码。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

入门夯实游戏功能

关注降价:关注商品的降价提醒

【游戏】 一、一行代码拆解:if price < WATCH[goods] then notify end —— 关注降价的…

2026-09-26 22:24 996 技术组 · 0 阅读
进阶实战游戏功能

竞技场积分赛:胜负积分的晋级规则

【游戏】 一、业务场景:赛季结算发现一名玩家胜率 10% 却排在黄金段——历史计分只加不减,积分体系失效 3 个月;积分赛—…

2026-09-26 22:24 996 技术组 · 0 阅读
进阶实战语法算法

Lua卡塔兰数:合法括号序列的计数

【语法】 一、抛坑提问:3 对括号能组成多少种合法序列?答案是 5——卡塔兰数列:每一项等于前一项乘 2 倍的 2n 减 1…

2026-09-26 22:24 996 技术组 · 0 阅读
进阶实战语法算法

Lua线性同余:自实现随机数生成器

【语法】 一、抛坑提问:不想用全局随机函数(怕多处共享种子互相干扰),可自实现一个独立随机序列——线性同余法三行核心:乘、加…

2026-09-26 22:24 996 技术组 · 0 阅读
策划架构游戏功能

双人复核:大额支取的双人确认

【游戏】 一、一行代码拆解:PENDING[outId] = {by = actor, at = now} —— 双人复核的…

2026-09-26 22:24 996 技术组 · 0 阅读
进阶实战语法算法

Lua蒙地卡罗:随机撒点估算圆周率

【语法】 一、隐蔽陷阱:圆周率小数位背不出更多就不算理解随机模拟?用蒙地卡罗法随机撒点统计,10 万个点能把圆周率估到两位小…

2026-09-26 22:24 996 技术组 · 0 阅读