梦回苍石居  |
Cangshi Live

苍石函数封装 - 触发器使用教程

WAR3
苍石 发表于:2026-03-13 11:24:47  最后编辑于:3 天前 12 Views

苍石函数封装 - 触发器使用教程

本教程将教会你如何使用触发器编辑器中的函数封装功能,让你的地图制作更加高效。


目录

  1. 什么是函数封装?为什么要用它?
  2. 如何创建一个函数
  3. 如何调用函数
  4. 如何传递参数
  5. 如何在函数内获取参数
  6. 如何设置和获取返回值
  7. 完整示例
  8. 全局事件功能

一、什么是函数封装?为什么要用它?

痛点

  1. 有太多重复或类似的逻辑,总是在复制粘贴,过程中容易出错
  2. 一个触发写特别长,遇到bug时改起来费时费力

解决方案

函数就是一段可重复使用的代码块,你可以把它想象成一个工具箱里的瑞士军刀。

好处:

  • 封装:把相关的逻辑封装在一起,使逻辑更加整洁清晰
  • 参数:可以接受输入值,根据不同的值执行不同的操作
  • 返回值:执行完毕后可以返回一个结果
  • 重用:可以在任何地方多次调用同一个函数

二、如何创建一个函数

步骤

  1. 新建一个触发器
  2. 为这个触发器添加一个事件注册函数(在 [苍石]函数 分类下)
  3. 在这个触发器中编写你的逻辑

具体操作

在触发器编辑器中:

事件: 选择 [苍石]函数 分类下的 注册函数

  • 输入函数名(支持中文,必须唯一)

条件:

动作: 编写你的函数逻辑

重要提示:函数名需要是唯一的,支持中文!

示例:创建一个名为"加法"的函数

事件:注册函数 "加法"
条件:无
动作:(这里写你的逻辑)

三、如何调用函数

方法一:直接调用函数

使用动作:调用函数(在 [苍石]函数 分类下)

动作:
    调用函数
        - 函数名:"你的函数名"
        - 参数集合:无参数

方法二:将触发器作为函数调用

使用动作:将触发器作为函数进行调用(在 [苍石]函数 分类下)

动作:
    将触发器作为函数进行调用
        - 触发器:你的触发器变量
        - 参数集合:无参数

四、如何传递参数

什么是参数?

参数就是你传给函数的数据,比如单位、玩家、整数、实数等。

最大参数数量

最多支持同时传递 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 )

Person name
未登录用户可以发表匿名评论