苍石函数封装 - 触发器使用教程
苍石函数封装 - 触发器使用教程
本教程将教会你如何使用触发器编辑器中的函数封装功能,让你的地图制作更加高效。
目录
一、什么是函数封装?为什么要用它?
痛点
- 有太多重复或类似的逻辑,总是在复制粘贴,过程中容易出错
- 一个触发写特别长,遇到bug时改起来费时费力
解决方案
函数就是一段可重复使用的代码块,你可以把它想象成一个工具箱里的瑞士军刀。
好处:
- 封装:把相关的逻辑封装在一起,使逻辑更加整洁清晰
- 参数:可以接受输入值,根据不同的值执行不同的操作
- 返回值:执行完毕后可以返回一个结果
- 重用:可以在任何地方多次调用同一个函数
二、如何创建一个函数
步骤
- 新建一个触发器
- 为这个触发器添加一个事件:
注册函数(在[苍石]函数分类下) - 在这个触发器中编写你的逻辑
具体操作
在触发器编辑器中:
事件: 选择 [苍石]函数 分类下的 注册函数
- 输入函数名(支持中文,必须唯一)
条件: 无
动作: 编写你的函数逻辑
重要提示:函数名需要是唯一的,支持中文!
示例:创建一个名为"加法"的函数
事件:注册函数 "加法"
条件:无
动作:(这里写你的逻辑)
三、如何调用函数
方法一:直接调用函数
使用动作:调用函数(在 [苍石]函数 分类下)
动作:
调用函数
- 函数名:"你的函数名"
- 参数集合:无参数
方法二:将触发器作为函数调用
使用动作:将触发器作为函数进行调用(在 [苍石]函数 分类下)
动作:
将触发器作为函数进行调用
- 触发器:你的触发器变量
- 参数集合:无参数
四、如何传递参数
什么是参数?
参数就是你传给函数的数据,比如单位、玩家、整数、实数等。
最大参数数量
最多支持同时传递 10个参数。
第一步:将数据转换为"动态变量"
在调用函数前,需要先把数据转换为"动态变量"格式。
在触发器编辑器中,找到 [苍石]动态变量 分类,你会看到以下函数:
基础类型转换
| 你要传入的数据类型 | 使用的函数 | 显示名称 |
|---|---|---|
| 整数 | <整数> |
<整数>100 |
| 实数 | <实数> |
<实数>3.14 |
| 字符串 | <字符串> |
<字符串>"你好" |
| 布尔值 | <布尔值> |
<布尔值>是 |
游戏对象类型转换
| 你要传入的数据类型 | 使用的函数 |
|---|---|
| 单位 | <单位> |
| 玩家 | <玩家> |
| 物品 | <物品> |
| 单位组 | <单位组> |
| 玩家组 | <玩家组> |
| 点 | <点> |
| 区域(矩型) | <区域(矩型)> |
| 计时器 | <计时器> |
| 触发器 | <触发器> |
| 哈希表 | <哈希表> |
| 特效 | <特效> |
| 音效 | <音效> |
| 闪电效果 | <闪电效果> |
| 漂浮文字 | <漂浮文字> |
| 任务 | <任务> |
| 对话框 | <对话框> |
| 对话框按钮 | <对话框按钮> |
| 排行榜 | <排行榜> |
| 多面板 | <多面板> |
| 技能 | <技能> |
| 单位类型 | <单位类型> |
| 物品类型 | <物品类型> |
| 角度 | <角度> |
第二步:组合多个参数
使用 参数集合(1个) ~ 参数集合(10个) 函数来组合多个动态变量(在 [苍石]动态变量 分类下)
| 参数数量 | 使用的函数 |
|---|---|
| 1个参数 | 参数集合(1个) |
| 2个参数 | 参数集合(2个) |
| 3个参数 | 参数集合(3个) |
| … | … |
| 10个参数 | 参数集合(10个) |
示例:传递2个参数(单位和整数)
第一步: 将单位转换为动态变量
设置 变量A = <单位> 触发单位
第二步: 将整数转换为动态变量
设置 变量B = <整数> 100
第三步: 组合成参数集合
设置 参数集合 = 参数集合(2个)
- 参数1:变量A
- 参数2:变量B
第四步: 调用函数
调用函数
- 函数名:"我的函数"
- 参数集合:参数集合
五、如何在函数内获取参数
方法:使用"获取当前函数/事件的参数"系列函数
在函数内部,找到 [苍石]函数 分类下的 获取当前函数/事件的参数 系列函数。
参数从 第1个 开始,最大 第10个。
可用的获取函数
| 你想要获取的类型 | 使用的函数 |
|---|---|
| 整数 | <整数>获取当前函数/事件的参数 |
| 实数 | <实数>获取当前函数/事件的参数 |
| 字符串 | <字符串>获取当前函数/事件的参数 |
| 布尔值 | <布尔值>获取当前函数/事件的参数 |
| 单位 | <单位>获取当前函数/事件的参数 |
| 玩家 | <玩家>获取当前函数/事件的参数 |
| 物品 | <物品>获取当前函数/事件的参数 |
| 单位组 | <单位组>获取当前函数/事件的参数 |
| 点 | <点>获取当前函数/事件的参数 |
| … | … |
示例:获取第一个参数(单位类型)
设置 我的单位 = <单位>获取当前函数/事件的参数
- 取第 1 个参数
带默认值获取参数
如果参数可能为空,可以使用带默认值的版本:
| 类型 | 使用的函数 |
|---|---|
| 整数 | <整数>获取当前函数/事件的参数(带默认值) |
| 实数 | <实数>获取当前函数/事件的参数(带默认值) |
| 字符串 | <字符串>获取当前函数/事件的参数(带默认值) |
| 布尔值 | <布尔值>获取当前函数/事件的参数(带默认值) |
示例:获取参数,如果为空则使用默认值
设置 我的单位 = <整数>获取当前函数/事件的参数(带默认值)
- 取第 1 个参数
- 默认:0
判断参数是否已设置
使用函数:是否设置函数/事件的参数(在 [苍石]函数 分类下)
条件:是否设置函数/事件的参数
- 第 1 个参数
类型自动转换
参数会根据你获取的类型自动转换:
- 传入整数 10,获取实数类型,会得到 10.0
- 传入单位,获取整数类型,会得到单位的句柄地址
警告:如果传入一个无效的整数地址去获取单位,游戏可能会崩溃!
六、如何设置和获取返回值
设置返回值
在函数内部使用动作:设置当前函数的返回值(在 [苍石]函数 分类下)
设置当前函数的返回值
- 动态变量:<整数>999
提示:若多次设置以最后一次设置的为准,建议搭配【跳过剩余动作】一起使用。
获取返回值
方法一:调用函数时直接获取返回值
使用 <类型>调用函数并获取返回值 系列函数(在 [苍石]函数 分类下)
| 返回类型 | 使用的函数 |
|---|---|
| 整数 | <整数>调用函数并获取返回值 |
| 实数 | <实数>调用函数并获取返回值 |
| 字符串 | <字符串>调用函数并获取返回值 |
| 布尔值 | <布尔值>调用函数并获取返回值 |
| 单位 | <单位>调用函数并获取返回值 |
| 玩家 | <玩家>调用函数并获取返回值 |
| … | … |
示例:调用函数并获取整数返回值
设置 结果 = <整数>调用函数并获取返回值
- 函数名:"我的函数"
- 参数集合:无参数
方法二:调用函数后再获取返回值
使用 <类型>获取上一次调用函数的返回值 系列函数
| 返回类型 | 使用的函数 |
|---|---|
| 整数 | <整数>获取上一次调用函数的返回值 |
| 实数 | <实数>获取上一次调用函数的返回值 |
| 字符串 | <字符串>获取上一次调用函数的返回值 |
| 布尔值 | <布尔值>获取上一次调用函数的返回值 |
| 单位 | <单位>获取上一次调用函数的返回值 |
| … | … |
示例:
调用函数
- 函数名:"我的函数"
- 参数集合:无参数
设置 结果 = <整数>获取上一次调用函数的返回值
七、完整示例
示例1:简单的加法函数
第一步:创建函数
触发器名称:函数_加法
事件:注册函数 "加法"
条件:无
动作:
设置 数字1 = <整数>获取当前函数/事件的参数
- 取第 1 个参数
设置 数字2 = <整数>获取当前函数/事件的参数
- 取第 2 个参数
设置 总和 = 数字1 + 数字2
设置当前函数的返回值
- 动态变量:<整数>总和
第二步:调用函数
动作:
设置 参数1 = <整数>10
设置 参数2 = <整数>20
设置 参数集合 = 参数集合(2个)
- 参数1:参数1
- 参数2:参数2
设置 结果 = <整数>调用函数并获取返回值
- 函数名:"加法"
- 参数集合:参数集合
显示文本信息:(转换 结果 为字符串)
示例2:治疗单位的函数
第一步:创建函数
触发器名称:函数_治疗单位
事件:注册函数 "治疗单位"
条件:无
动作:
设置 目标单位 = <单位>获取当前函数/事件的参数
- 取第 1 个参数
设置 治疗量 = <实数>获取当前函数/事件的参数
- 取第 2 个参数
设置 当前生命 = 目标单位 的生命值
设置 目标单位 的生命值为 (当前生命 + 治疗量)
第二步:调用函数
事件:任意单位 发动技能效果
条件:(施放技能) 等于 治疗术
动作:
设置 参数1 = <单位>施法单位
设置 参数2 = <实数>100.00
设置 参数集合 = 参数集合(2个)
- 参数1:参数1
- 参数2:参数2
调用函数
- 函数名:"治疗单位"
- 参数集合:参数集合
示例3:递归调用(计算阶乘)
第一步:创建函数
触发器名称:函数_阶乘
事件:注册函数 "阶乘"
条件:无
动作:
设置 数字N = <整数>获取当前函数/事件的参数
- 取第 1 个参数
如果(条件)成立则执行(动作)
条件:数字N 小于等于 1
动作:
设置当前函数的返回值
- 动态变量:<整数>1
跳过剩余动作
设置 参数1 = <整数>(数字N - 1)
设置 参数集合 = 参数集合(1个)
- 参数1:参数1
设置 子结果 = <整数>调用函数并获取返回值
- 函数名:"阶乘"
- 参数集合:参数集合
设置 最终结果 = 数字N × 子结果
设置当前函数的返回值
- 动态变量:<整数>最终结果
八、全局事件功能
除了函数功能,本系统还提供了全局事件功能,让你可以在一个地方触发事件,多个地方监听并响应。
触发全局事件
使用动作:触发全局事件(在 [苍石]全局事件 分类下)
触发全局事件
- 全局事件名:"玩家死亡"
- 参数集合:参数集合
监听全局事件
使用事件:监听全局事件(在 [苍石]全局事件 分类下)
事件:监听全局事件 "玩家死亡"
条件:无
动作:
设置 死亡玩家 = <玩家>获取当前函数/事件的参数
- 取第 1 个参数
显示文本信息:(玩家(死亡玩家) 的名字 + "死亡了!")
提示:销毁当前触发器即可取消对该事件的监听。
函数速查表
在触发器编辑器中的分类
| 分类名称 | 包含的函数类型 |
|---|---|
[苍石]函数 |
注册函数、调用函数、获取参数、设置/获取返回值等 |
[苍石]动态变量 |
类型转换、参数集合组合 |
[苍石]全局事件 |
触发全局事件、监听全局事件 |
常用函数对照表
| 功能 | 函数名称 | 所在分类 |
|---|---|---|
| 创建函数 | 注册函数 |
[苍石]函数 |
| 调用函数 | 调用函数 |
[苍石]函数 |
| 调用并获取返回值 | <类型>调用函数并获取返回值 |
[苍石]函数 |
| 获取参数 | <类型>获取当前函数/事件的参数 |
[苍石]函数 |
| 设置返回值 | 设置当前函数的返回值 |
[苍石]函数 |
| 获取上次返回值 | <类型>获取上一次调用函数的返回值 |
[苍石]函数 |
| 转换为动态变量 | <类型> |
[苍石]动态变量 |
| 组合参数 | 参数集合(N个) |
[苍石]动态变量 |
| 触发事件 | 触发全局事件 |
[苍石]全局事件 |
| 监听事件 | 监听全局事件 |
[苍石]全局事件 |
常见问题
Q: 函数名可以重复吗?
A: 不可以,函数名必须是唯一的,否则会提示错误。
Q: 最多可以传递多少个参数?
A: 最多支持同时传递10个参数。
Q: 如果不传参数怎么办?
A: 参数集合选择 无参数 即可。
Q: 参数类型会自动转换吗?
A: 可以,系统会自动进行类型转换。但要注意,如果是无效的句柄地址转单位等操作可能会导致游戏崩溃。
Q: 函数可以嵌套调用吗?
A: 可以,函数支持嵌套调用。
教程结束
如有问题,请联系作者QQ:188802483

文章评论 ( 0 )