Skip to content
On this page

数学函数

下面这段可以直接复制到页面 yml。它会在页面打开时处理价格和生命比例,并把结果发到玩家聊天栏:

yaml
vars:
  price: 1.236
  health: 17
  maxHealth: 20
events:
  open: |-
    vars.price = round(vars.price, 2)
    vars.priceText = fixed(vars.price, 2)
    vars.healthRatio = clamp(vars.health / max(vars.maxHealth, 1), 0, 1)
    log("价格:{vars.priceText},生命比例:{vars.healthRatio}")

round(1.2, 2) 得到的是数字 1.2,适合继续加减乘除;fixed(1.2, 2) 得到的是文字 "1.20",适合显示固定小数位。需要计算就用 round,需要展示金额、百分比等固定格式就用 fixed

函数表

英文中文参数返回值说明
trunc(value)取整1数字向 0 取整,trunc(-1.8)-1
round(value[, digits])四舍五入1 或 2数字HALF_UP 四舍五入,位数默认 0
floor(value)向下取整1数字向负无穷取整,floor(-1.2)-2
ceil(value)向上取整1数字向正无穷取整,ceil(-1.2)-1
fixed(value, digits)保留小数2文字HALF_UP,保留末尾的 0
abs(value)绝对值1数字返回绝对值
sign(value)符号1数字返回 -101
min(a, ...)最小值1 至 32数字返回最小参数
max(a, ...)最大值1 至 32数字返回最大参数
clamp(value, min, max)限制范围3数字把数值限制在闭区间内
pow(value, power)次方2数字幂运算
sqrt(value)平方根1数字参数不能小于 0
lerp(start, end, ratio)插值3数字按比例插值,比例可以超出 0 到 1
map(value, inMin, inMax, outMin, outMax)映射范围5数字映射区间,不会自动裁剪结果
sin(value)正弦1数字参数使用弧度
cos(value)余弦1数字参数使用弧度
tan(value)正切1数字参数使用弧度
atan2(y, x)方向角2数字返回弧度角
radians(degrees)转弧度1数字角度转弧度
degrees(radians)转角度1数字弧度转角度
random() / random(min, max)随机数0 或 2数字返回 [0,1)[min,max);两端相等时返回该值
randomInt(min, max)随机整数2数字返回包含两端的安全整数

roundfixeddigits 只能是 012 的整数。三角函数都使用弧度;例如先写 sin(radians(30)),结果约为 0.5map 只换算区间,不会把超出输入区间的值裁掉;需要裁剪时再套一层 clamp

响应式进度条

text
component("health_bar").layout.width = formula(
  lerp(0, 200, clamp(vars.health / max(vars.maxHealth, 1), 0, 1))
)

formula(...) 保存的是原始公式,所以之后修改 vars.health,进度条仍会重新计算。若去掉 formula,普通 = 只保存脚本执行当时算出的数字。

随机数只能写在执行型脚本中

text
vars.dice = randomInt(1, 6)

随机函数可以写在事件、方法和计时器回调中。布局公式、formula(...)visibleWhenenabledWhen 和响应式文字 {...} 都会拒绝随机函数,避免每次渲染时不停变化。

randomInt 的两端必须是 -90071992547409919007199254740991 内的整数,并且最小值不能大于最大值。

写错时会怎样

位置非法参数、未知函数、非有限结果或定义域错误
事件、方法、计时器脚本跳过当前错误语句,后续语句继续执行
布局公式保存和新绑定时拒绝;运行时旧数据失败时保留最后一次有限值,首次失败使用 0
visibleWhen / enabledWhen保存时拒绝;运行时遇到旧的非法条件按 false 处理
响应式文字 {...}保留原占位内容,页面不会崩溃

常见错误包括:round() 参数不足、fixed(1, 2, 3) 参数过多、sqrt(-1)map 输入区间两端相等、clamp 最小值大于最大值,以及任何 NaN 或无限结果。