公式
# 公式
在上一节中我们学习了什么是属性,属性只是一个简单的数值,那么当我们的属性是一个需要经过复杂计算才能得到的数值的话,该怎么办呢?这时候就需要用到公式了。
我们来看一下一个典型的公式的样子。假设我们玩家有三个属性,分别为 基础攻击力
,等级
,攻击力成长
,如果玩过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,这样子土豆-箱子
就不会被计算进去了。
具体效果,就是上面那张图的例子。
提示
我们可以使用公式编辑器下方的快捷测试功能,填入属性具体的数值,即可快速看到这个公式实际的计算结果。
# 视频教程
本文字教程持续更新中!还有很多内容没来得及完善,可以先看视频教程~视频较老,部分界面可能不同,理解概念即可