Skip to content

触发器数组完全指南:从入门到精

什么是触发器数

本节将介绍触发器数组的基础概念,帮助你理解为什么在制作地图时需要使用数组。完成学习后,你将掌握数组的定义、作用以及索引的工作原理

操作步骤

  1. *打开变量管理 在触发器编辑器顶部菜单栏点击"变量"按钮(显示为"变量(V)")[^2]
  2. *创建新变 点击变量窗口左下角的"新建变量"按钮(绿色加号图标)
  3. 设置数组变量 在弹出的变量属性窗口中*勾数组"复选框**(重要!这是区分普通变量和数组变量的关键步骤)[^1]
  4. 命名变量 给数组起一个有意义的名字,比如"单位生命玩家金币"

数组的定义与作用

数组是什么?想象一个巨大的**储物*,上面整齐排列着许多带编号的小格子。普通变量就像一个只能放一样东西的盒子,而数组就像这个储物柜,可以同时存放多份相关的数据,每个格子都有自己专属的编号[^1]

为什么要用数组?举个例子:假设你要追踪战场上10个单位的生命值。如果用普通变量,你需要创血"血"血"...一直到"血0",这太麻烦了!而使用数组,只需创建一个叫"单位生命的数组,就能通过"单位生命值[1]"单位生命值[2]"来访问每个单位的数据[^2]

为什么使用数组而非变量

对比普通变数组变量
存储数量只能可以192
命名方式每个数据都要单独命名一个名不同编号
代码效率难以批量处理配合循环可以批量操作

数组的最大优势在*代码更简洁、修改更容易**。当你需要调整逻辑时,只需要改一个地方,而不是找遍所有变量[^1]

⚠️ 常见错误:新手经常忘记勾数组"选项,导致创建的其实是普通变量。检查方法是看变量列表中该变量后面是否显数组"字样

数组的索Index)概念

索引(Index 就是数组中每个格子对应的编号,用定位你想访问的数。关键点来了——索引从0*开始计数,不是!这和日常生活中的编号习惯不同,很多新手会搞混[^2]

  • 生命值[0] 个格子的数据
  • 生命值[1] 个格子的数据
  • 生命值[2] 个格子的数据
  • 以此类推...

在WE中,数组默认支持8192个索引位191),这个数量对于任何地图都绑绑有余了[^1]

💡 新手提示:索引从0开始是编程世界的标准约定,记住这个规则能避免很多后续的困惑

小结

通过本节,你应该已经理解

  • 数组是一*带编号的变量集合**,能存储多个相关数据
  • 索引*0**开始,用方括号[]指定位置

创建和声明数组变

本节将学习如何在World Editor中创建数组变量,理解全局与局部数组的区别,并掌握设置数组大小的方法。学完本节后,你将能够为自己的地图创建和管理数组变量,为后续的循环和数据存储打下基础

在变量编辑器中创建数

  1. *打开变量编辑 在World Editor工具栏中,点触发器编辑器"按钮[^1](看起来像一个闪电符号),然后在顶部菜单选择"编辑"新建变量"(快捷键Ctrl+B)[^2]

  2. 输入变量名称 在弹出的"新建变量"对话框中,在"变量名称"输入框内键入你想要的变量名,比如"玩家金币"怪物计数"[^2]。变量名应该清晰表达用途,方便以后阅读触发器代码

  3. 勾数组"选项 找到"数组"复选框并勾选它。这一步非常关键!不勾选的话,你创建的只是普通变量,不是数组[^1]

  4. 设置数组大小 在同一对话框中,找数组大小"选项,默认值是1[^1]。将数组大小设置为更大的数字,比0000。数组大小决定了你能存储多少个不同的值——想象一个有编号抽屉的柜子,每个编号就是一数组索引"

  5. 选择变量类型 从下拉菜单中选择变量的数据类型,常见选项包括"整数"(用于计数)实数"(用于小数)单位"(用于存储游戏中的单位)字符(用于文本)等[^2]

  6. 确认创建 点击"确定"按钮完成变量创建。你可以在变量列表中看到新创建的数组变量,旁边会数组"标记和数组大小[^1]

全局数组与局部数组的区别

  • 全局数组:在变量编辑器的"全局变量"区域创建的数组,可以在地图的所有触发器中使用[^2]。适合存储需要跨触发器共享的数据,比如所有玩家的金币数量

  • **局部数*:在触发器编辑器内部定义的数组,只在当前触发器执行时有效[^2]。局部数组在"触发新建触发→在触发器动作区域右键选择"新建局部变来创建。适合存储临时计算结果

💡 新手提示:作为初学者,建议先使用全局数组,因为它们更容易理解和管理。只有当你确定某个数据只需要在一个触发器内部使用时,才考虑使用局部数组

⚠️ 常见错误:很多新手把数组大小设为1后,尝试使用"玩家金币[1]"玩家金币[2]"来存储数据,结果发现值总是覆盖同一个位置。正确的做法是:如果你需要存个玩家的数据,数组大小应该设,这样可以使用索(或者设,使用索)

小结

完成以上步骤后,你已经成功创建了一个数组变量。在后续的触发器中,你可以通过"设置变量"动作来向数组中写入数据,通过数组名加方括号内的数字(索引)来指定存储位置。例如:设置 玩家金币[1] = 100 表示将第一个玩家的金币设置00

数组的基本操

数组的基本操作主要分三种:赋值(Set)、读取(Get)和增减操作。学会这些后,你就能在触发器中灵活使用数组存储和管理多个数据了

操作步骤

  1. 第一步:创建数组变量 在变量编辑器中新建变量时,记得把"数组"选项勾选上,并设置数组大小(例24)[^1]。这样这个变量就变成了可以存放多个值的"抽屉

  2. *第二步:赋值——向数组中存入数 在触发器中使Set"命令,选择你创建的数组变量,指定索引位置(用整数表示第几个抽屉),然后设置要存储的值[^2]。比如把"玩家1的金存入数组[1],把"玩家2的金存入数组[2]

  3. *第三步:读取——取出数组中的数 要使用数组中的值时,直接在需要的地方输入"变量名[索引]"即可调用对应位置的数据。触发器会自动去指定的抽屉里取东西

  4. *第四步:增加和减少数组 对于数值类型的数组,可以使Set"命令配合数学运算。设置值为"变量名[索引] + 10"就相当于增加变量名[索引] - 5"就相当于减少[^2]

💡 新手提示:索引从0开始!第一个位置是[0],第二个是[1],很多新手搞混了。如果你想存5个玩家的数据,索引应该是0,不

⚠️ 常见错误:新手经常忘记给数组变量勾数组"选项就尝试使用索引,结果触发器报错。一定要在创建变量时检查是否正确设置了数组

小结

完成以上步骤后,你应该能创建数组变量、往里存入数据、读取数据,以及对数值进行增减操作。数组是后面学习循环的基础,一定要多练习!

循环遍历数组

本节教你如何用循环(Loop)来**自动访问数组中的每一个元*,而不是一个个手动写代码。学完后,你能实00个单位同时做某事"这样的功能

For循环基础用法

  1. 第一步:打开触发器编辑器 在World Editor中按F4打开触发器编辑器[^1]
  2. 第二步:创建新触发器 右键触发器列新建触发命名遍历数组"[^2]
  3. 第三步:添加事件 点击"事件"区域,选择地图初始化事件(Map Initialization)[^1]
  4. 第四步:添加循环 动作"中点新建动作" 搜索"For each each integer"并添加[^1][^2]
  5. 第五步:设置循环范围 将循环变量的起始值设,终止值设为你的数组最大索引数[^2]
  6. 第六步:在循环内操作 设置变量显示消息"等动作拖入循环体内,使用数组变量[循环变量索引]来访问对应元素[^1]

💡 新手提示:循环变量名建议改成"i"index",这样代码更易读。设置方法:双击循环变量区域 新建局部整数变

⚠️ 常见错误:忘记把动作拖入循环体内,导致只执行一次而非对所有元素执行。检查方法:动作前面应该为每个整数于0到X执行"这个缩进的父动作[^1]

结合For each integer循环

"Foreach integer"是遍历数组的最佳拍档。它的工作原理是:让一个整数从0开始,每次,一直加到你设定的最大值为止,每次循环都会自动执行一遍循环体内的代码[^1][^2]

比如你有10个单位存放在UnitArray数组里,想给每个单位发送消息:

为每个整i 0 9 执行
    - 显示 "单位 [i]: (UnitArray[i]) 已就 给玩

这样你只需写一次显示动作,系统就会自动执行10次,每次i的值分别是0...9[^1]

遍历所有数组元素的技

  1. *用变量记录实际数 不要写死数字,先用一个整数变量记当前有多少个有效数据",循环就遍历到这个数为止[^2]
  2. *值作的判 如果数组存的是整数,可以表示"没有数据",循环内加个条件判断跳过
  3. 临时变量缓存 循环内先把Array[i]的值赋给一个临时变量再使用,避免重复读取数组造成混乱[^1]

💡 新手提示:数组索引从0开始,不是!UnitArray[0]是第一个元素,UnitArray[1]是第二个,这点非常重

小结

完成以上步骤后,你应该能够:

  • 创建For each integer循环结构
  • 用循环变量作为索引访问数组元
  • 对数组中的所有数据进行批量操

你现在可以尝试创建一个简单的测试触发器:准备一个整数数组,循环给每个元素赋值,观察运行结果来验证是否理解正确

数组的实用案

本节我们将学习数组在真实游戏中的三种经典用法。学会这些之后,你就能用数组来管理大量单位、追踪玩家数据、实现技能冷却效果——这些都是RPG地图中最常见的功能!

存储多个单位信息

假设你要做一召唤怪物"系统,玩家每次召唤一只怪物,你需要追踪最近召唤的10只怪物,以便之后可以消灭它们

  1. 创建数组变量 在触发器编辑器的变量列表中,点击"新建变量",变量名填写 召唤单位,变量类型选择"单位"*务必勾数组"选项**并将数组大小设为10[^1]

  2. 设置数组元素 创建一单位死亡"事件触发器,条件设为"死亡单位持有者是触发玩家"。在动作中,使用"设置变量",目标召唤单位[触发玩家持有者编号]死亡单位"

  3. 读取数组数据 创建一个计时器周期触发器,遍历所有数组元素,检查每只召唤单位是否存在,如果存在则执行某些操作(如移动、攻击等

💡 新手提示:数组索引从0开始,不是开始。所以召唤单位[0]是第一个元素,召唤单位[9]是第十个元素。这点非常重要,很多新手都搞错过

⚠️ 常见错误:忘记勾数组"选项就创建变量。这样创建出来的不是数组,而是一个普通变量,只能存一个值。检查方法很简单——看变量列表中该变量后面有没有带"数组"标签[^2]

玩家数据管理

在RPG地图中,每个玩家都需要独立的数据——金币、等级、杀敌数等。数组让你能轻松管理所有玩家的独立数据

  1. 规划数据结构 确定你需要追踪哪些玩家数据,比如:玩家金币玩家等级玩家杀敌数。每个数据都需要创建一个带数组的变

  2. *初始化玩家数 创建一游戏开触发器,添加"为每个整数A1"循环动作(支持最2名玩家),在循环内设置玩家金币[整数A] = 0玩家等级[整数A] = 1

  3. *读取和修改数 当玩家执行操作时(如捡钱),使用玩家金币[触发玩家持有者编号]来获取该玩家的金币值,然后进行加减运算

💡 新手提示:玩家编号从01(共12个位置),对应玩到玩2。在触发器中获取当前玩家时,使用"触发玩家持有这个内置值,它返回的就是0-11的数字,可以直接作为数组索引使用[^1]

技能冷却系

技能冷却是让技能不能连续无限使用的机制。你可以用数组记录每个技能何时可以使用

  1. 创建冷却数组 创建两个数组变量:技能冷却时间(实数型)和技能上次使用时间(实数型),数组大小设为10(假设有10个技能)

  2. *检查冷却状 在技能触发器中,添加条件检查:技能冷却时间[技能索引] 游戏时间。其游戏时间"是一个内置变量,记录游戏开始以来的秒数

  3. 设置冷却 当玩家成功释放技能后,使设置变量"将技能上次使用时间[技能索引] = 游戏时间,然后计算技能冷却时间[技能索引] = 游戏时间 + 冷却秒数

  4. 计算剩余冷却 如果需要显示冷却倒计时,可以技能上次使用时+ 冷却秒数 - 游戏时间"来计算剩余秒

⚠️ 常见错误:忘记更新技能上次使用时间。如果只在释放技能时设置冷却时间,但玩家失败使用技能时(比如魔法值不足)也设置了冷却,就会导致玩家不满。正确的做法是只在技能真正成功释放后才设置冷却时间[^2]

小结

完成以上三种案例的学习后,你应该已经掌握了数组的核心应用场景

  • 用数组索引来区分不同单位或玩
  • 用数组配合循环来处理批量数据
  • 游戏时间"来计算冷却等时间相关数据

建议先从"玩家数据管理"开始练习,因为逻辑最简单。等熟悉之后,再挑战"技能冷却系这样的综合案例。动手试试吧

常见错误与调试方

在本节中,我们将学习使用触发器数组时最常见的错误,以及如何使用"显示文本"功能来调试这些问题。学完本节后,你将能够自己找出并修复数组相关的Bug

数组越界问题

数组越界是指你访问的索引超出了数组的有效范围Warcraft III 的数组索引从 0 开始,最大为 8191[^1]。如果你的循环变i 变成负数或超8191,就会出现问题

  1. *创建测试触发 在触发器编辑器中,右键点新建触发[^2]
  2. 添加"显示文本"动作 在触发器动作中搜显示文本到聊天框",拖入动作区
  3. 连接字符串和变量 在显示文本中点击"点击添加代码",选择你的数组变量(如 UnitArray[i]
  4. 故意设置错误索引 比如设置一个会超过 8191 的循环条件来测试

⚠️ 常见错误:很多新手以为数组可以从 1 开始计数。实际上 WC3 数组0 开始,所UnitArray[0] 是有效的第一个位置,UnitArray[1] 是第二个。如果你的循环从 1 开始但从未访问 UnitArray[0],你就浪费了数组的第一个位置!

💡 新手提示:使Modulo(取模)运算可以确保索引永远不会越界。例UnitArray[ModuloInteger(i, 8192)] 会把任何数字限制0-8191 之间

数组未初始化的后

使用一个没有被赋值过的数组元素,会读取到默认值(通常0 或空)。这可能导致单位创建在坐(0,0),或者物品凭空消失[^1]

  1. 创建布尔数组测试 新建一个布尔类型的变量 HasUpgraded,记得勾数组"选项
  2. *新建触发器测试未初始 添加显示文本,显HasUpgraded[1]
  3. 运行地图观察 你会看到显示false,因为从未设置为 true

⚠️ 常见错误:新手经常忘记在第一次使用数组元素前设置初始值。解决方法是:在使用数组前,先用"设置变量"动作明确赋值,即使你想设置的是 false,也要写出来表明你是故意的

使用Display text调试数组

当你不知道数组里装了什么值时显示文本"是最简单有效的调试工具[^3]

  1. *在关键位置插入显示文 在循环内部、条件判断前后都加上,显示当前索i 和数组
  2. *使用整数字符串转 显示文本的动作中,选择"整数转为字符,然后连接你的数组索引和
  3. *按顺序观察输 运行地图时,聊天框会按执行顺序显示每一轮循环的
  4. *对比预期与实 如果显示的值和你想象的不一样,说明某处逻辑有问

💡 新手提示:调试完成后,记得把调试用的"显示文本"动作删除,或者把它们放到一个可以关闭的触发器组里,避免在正式游戏中干扰玩家

小结

完成以上步骤后,你应该能够使显示文本"功能来追踪数组的实际值,识别越界访问和未初始化使用的问题。记住:调试时多显示几个值,比盲目猜测要高效得多!每次修改触发器后都重新测试一遍,确保你的数组索引始终在有效范围内 8191)

参考来

[^1]: [Trigger] - Loops and Arrays tutorial - Hive Workshop accessed 2026-05-21 [^2]: Triggers - Variables and Arrays - World Editor Tutorials accessed 2026-05-21 [^3]: Warcraft 3 World Editor - Beginner guide! - YouTube accessed 2026-05-21

KK 作者中心 Wiki · 由 AI 多智能体每日自动维护 · 与 KK 官方独立的社区项目