公式
# 公式
在上一节中我们学习了什么是属性,属性只是一个简单的数值,那么当我们的属性是一个需要经过复杂计算才能得到的数值的话,该怎么办呢?这时候就需要用到公式了。
我们来看一下一个典型的公式的样子。假设我们玩家有三个属性,分别为 基础攻击力,等级,攻击力成长,如果玩过RPG游戏的朋友应该知道,真正的攻击力是由这三个属性组成的一个公式得到的。即 攻击力 = 基础攻击力 + 等级 * 攻击力成长。
这个时候我们就可以新建一个组合属性名字叫做攻击力,然后设置公式为基础攻击力 + 等级 * 攻击力成长即可。关于组合属性的介绍,我们后文会有介绍。
组合属性是公式的一种运用。实际上公式可以用在各种地方。
# 最大最小值公式
比如属性的最大值和最小值,我们可以通过设置一个公式来控制,使得最大最小值会随着公式的真实计算值而变化
# 触发需求公式
当某个事件需要触发时,我们可以通过设置一个公式来控制,使得这个事件只有当公式的真实计算值大于或小于某个设定的属性才会触发。具体介绍可以看事件章节。
# 显示需求公式
我们在编辑样式的时候,可以通过设置一个需求条件,当条件满足时,就会显示这个样式。这个条件就是一个公式,当公式的真实计算值大于或小于某个设定的属性时,就会满足这个条件。
# 花费属性公式
当我们在编辑控件的时候,可以通过设置一个花费属性,当这个控件触发时,会消耗这个花费属性。这个花费的具体的值也是一个公式。具体介绍可以看控件章节。
# 获得属性公式
同理,我们也可以编辑一个获得属性。
总而言之,公式在LP编辑器中的应用无所不在,每一个会变的值,都可以设置一个公式来代表他。
# 运算符
在一个属性与另外一个属性之间,我们可以指定一个运算符,来控制这两个属性的计算方式。
接下来我们再举几个公式的例子,然后我们会介绍怎么去实现一些复杂的公式。
# 基本运算符
LP编辑器公式支持基本的加减乘除计算,还有取余即%模运算。例如
攻击力 = 基础攻击力 + 等级 * 攻击力成长
当前小时数 = 当前时间 / 每小时秒数 或 当前时间 / 3600
当前显示的秒数 = 当前时间 % 60
提示
计算的优先级是先乘除模后加减
# 特殊运算符
除了基本的运算符外,LP编辑器还提供其他一些特殊的计算符,使得公式可以更加的丰富复杂。
log运算。log运算是对数运算,可以用来计算一个数的对数。例如
当前等级 = 当前经验log升级经验 即 当前等级 = log(当前经验, 升级经验),升级经验为底数,当前经验为真数。
pow运算。pow运算是幂运算,可以用来计算一个数的幂。例如
当前经验 = 升级经验pow当前等级 即 当前经验 = 升级经验的当前等级次方。
提示
log运算和pow运算的优先级跟乘除相同。
# 最大最小运算符
LP编辑器还提供了最大(max)和最小(min)运算符,可以用来计算两个数的最大值和最小值。例如
当前经验 = 当前经验 max 0 即 当前经验和0中的大者,为当前经验。这样能避免负数。
当前等级 = 当前等级 min 最大等级 即 当前等级和最大等级中的小者,为当前等级。这样能避免超过最大等级。
提示
最大和最小运算符的优先级跟加减相同。
# 逻辑运算符
LP编辑器还提供了逻辑与(&)和逻辑或(|)和逻辑异或(^)运算符。例如
注意这里是二进制逻辑运算需要有一定编程基础的同学才能运用得当,这样子能实现更加复杂的公式,但通常我们不会使用这些特殊的运算符。
例如:
3 & 2 = 2 1 | 1 = 1 1 ^ 1 = 0
提示
逻辑与和逻辑或和逻辑异或运算符的优先级跟加减相同。
因此最终的优先级为 先 */% log pow 后 +-min max &^|。相同则从左往右计算。
# 系数和指数
公式的计算,不单单有属性的参与,还会有一些常数的参与,比如 攻击力 = 基础攻击力 + 3 * 等级 * 10 中的 3和10 就是一个常数。当然我们也可以用一个属性去代表他,但这有一点点浪费空间
所以我们通常会给一个属性,带上一个系数和一个指数来修饰,这样才最终代表我们公式里面的一个项。这跟我们学习数学时,里面的项是同一个概念。比如一个耳熟能详的概念合并同类项。
# 调整符
当一个项计算完毕后,我们通常需要对它进行一些调整,比如四舍五入,向下取整,取绝对值,取三角函数值等等。这些操作我们称之为调整符。
比如我们要计算一个角色的攻击力,我们可以这样写:
攻击力 = 基础攻击力 + 3.5 * 等级 ^ 1.1
但是这样的话,攻击力就会是一个浮点数,我们通常不希望这样,所以我们可以这样写:
攻击力 = 基础攻击力 + 取整(3.5 * 等级 ^ 1.1) 这里的取整,就是一个调整符,即公式里的某一项做一次调整。
LP编辑器提供了非常丰富的调整符,后面会一一介绍。
# 二次调整符(乘除调整符)
刚刚描述的调整符,是基于单个项的调整,但是有时候,我们需要对一个公式的结果再进行一次调整,这时候就需要用到二次调整符,LP编辑器中叫作乘除调整符。
比如:
攻击力 = 基础攻击力 + 四舍五入(取整(3.5 * 等级 ^ 1.1) + 取整(1.1 * 等级 ^ 1.2)) 这里的四舍五入,就是一个二次调整符,即对公式里的运算符计算的结果做一次调整。
# 关于括号
可以注意到,我们在写公式的时候,完全没有用到括号。在LP编辑器中并没有括号这个概念,但是我们可以通过其他途径来实现括号的效果。这个途径就是组合属性,具体可以看组合属性章节。
这里举一个简单的例子:
攻击力 = 基础攻击力 + (3.5 * 等级) ^ 1.1 这个公式,我们可以这样写:
攻击力 = 基础攻击力 + 修饰后等级 ^ 1.1 这里的修饰后等级实际上就是3.5 * 等级,就是一个组合属性,即一个属性的值,是由另一个属性的值计算得到的。
# 如何编辑属性
接下来会介绍在LP编辑器中,如何编辑一个公式。我们可以在很多地方看到公式,点击编辑公式后,会看到这样的一个界面:

可以看到,我们在左侧,可以直接编辑两项之间的运算符。还可以通过上下按钮调整顺序。
我们还可以对每一项做系数和指数上的修饰。
提示
当我们想要直接得到某个数字时,可以通过设置 系数 * 任意属性 ^ 0 来实现,即把系数填入你想要的值,然后把指数设置为0即可。因为任意属性 ^ 0 = 1,所以这样就可以直接得到你想要的数字。
例如 
调整符列表为
- 默认
- 向上取整
- 向下取整
- 四舍五入
- 绝对值
- 非0置1
- 为0置1,其他置0
- 为0置1,其他置-1
- 非0置-1
- 负数置-1正数置1
- 正数置-1负数置1
- 正数置1,其他置0
- 负数置1,其他置0
- 正数置-1,其他置0
- 负数置-1,其他置0
- 非1置0
- sin
- cos
可以看到,这里有很多的01调整符,那些调整符是什么意思呢?比如我们有一个养成游戏,人物可以收集土豆,有一个背包和箱子的概念,箱子只当人物在家里时,才能操作。
所以这个时候,我们就会有三个不同的属性来记录上面的三个概念,分别为:
土豆-箱子:记录玩家箱子里拥有的土豆数量土豆-背包:记录玩家背包里拥有的土豆数量玩家位置:记录玩家当前所在的位置
我们假定,当玩家在家里时,玩家位置的值为0,在其他地方时为1。
当我们想要计算玩家当前拥有的土豆数量时,当玩家在家里时,他的值应该是土豆-箱子和土豆-背包的和。在外面时,这个值就仅仅等于土豆-背包的值。
那么我们怎么去计算这个玩家当前拥有的土豆数量呢?
答案就是使用01调整符中的为0置1,其他置0。
玩家当前拥有的土豆数量 = 土豆-背包 + 土豆-箱子 * 为0置1,其他置0(玩家位置)
即当玩家位置为0时,里面的玩家位置计算项,实际计算结果为1,玩家位置为其他时,计算结果为0,这样子土豆-箱子就不会被计算进去了。
具体效果,就是上面那张图的例子。
提示
我们可以使用公式编辑器下方的快捷测试功能,填入属性具体的数值,即可快速看到这个公式实际的计算结果。
# 视频教程
本文字教程持续更新中!还有很多内容没来得及完善,可以先看视频教程~视频较老,部分界面可能不同,理解概念即可