Project1

标题: 战斗公式设置百分比的问题 [打印本页]

作者: kaveil    时间: 2016-3-18 00:16
标题: 战斗公式设置百分比的问题
本帖最后由 kaveil 于 2016-3-18 09:15 编辑

一个设置法力值越低伤害越高的公式:(2-a.mp / a.mmp) * 100,假设当前MP50,最大MP100
正常情况下应该是打出50点伤害,但是实际打出的伤害为100
似乎整个公式中某一环节计算出来的结果只要低于1就会被抛弃掉
RPGMV中能正常显示伤害,请问有什么办法可以在VA中也能正常显示吗
(。◕∀◕。)

————————————————————————————————————

好吧,实测了一下还是可以通过公式解决
例如改成 (2-a.mp* 100 / a.mmp) 得到的结果也是一样的

但是复杂公式上,比如
a.mat*5/b.mdf*2.5*(2-a.mp / a.mmp)  //基础125%法伤乘以当前法力值与最大法力值差比
得写成
(a.mat*5-b.mdf*2.5)*(200-a.mp*100/a.mmp)/100


于是有没有办法能让计算公式中获得小数,得出伤害结果后再省略掉? (o゚ω゚o)
作者: 喵呜喵5    时间: 2016-3-18 14:03
本帖最后由 喵呜喵5 于 2016-3-18 20:59 编辑

一旦在计算过程中遇到小数,则会自动转换成小数:
a.mat*5/b.mdf*2.5*(2-a.mp / a.mmp)

a.mat*5/b.mdf => a.mat、5、b.mdf 都是整数,所以结果还是整数
*2.5 => 遇到小数了,把之前的结果加个 .0 转换成小数后继续计算

(a.mat*5-b.mdf*2.5)*(200-a.mp*100/a.mmp)/100

a.mat*5 => a.mat、5都是整数,所以结果还是整数
b.mdf*2.5 => b.mdf是整数,2.5是小数,因此把 b.mdf 加一个 .0
(a.mat*5-b.mdf*2.5) => b.mdf*2.5 是小数,所以把 a.mat*5 的结果加一个 .0

按照这个机制,你的公式可以改写成这样:

1.0*a.mat*5/b.mdf*2.5*(2-1.0*a.mp / a.mmp)

作者: kaveil    时间: 2016-3-18 16:26
喵呜喵5 发表于 2016-3-18 14:03
一旦在计算过程中遇到小数,则会自动转换成小数:
a.mat*5/b.mdf*2.5*(2-a.mp / a.mmp)

这么改写的话,战斗测试出来的结果是恒定值,而不是动态数值
问题应该出在(2-a.mp / a.mmp)这里
常规情况下,假设mmp=100,mp=60
2-a.mp / a.mmp = 1.4 也就是说最终伤害增加了40%
……
然而VA的运算结果是,只要mp/mmp<1,均计算为0
2-a.mp / a.mmp = 2 只要mp和mmp不相等的情况下统统是2倍伤害
而前面的1.0*a.mat*5/b.mdf*2.5不管带不带小数点结果都是一样的
作者: 喵呜喵5    时间: 2016-3-18 19:47
kaveil 发表于 2016-3-18 16:26
这么改写的话,战斗测试出来的结果是恒定值,而不是动态数值
问题应该出在(2-a.mp / a.mmp)这里
常规情况 ...

少年,别光顾着看最后,前面的分析也看一遍啊!我只是没看完你全部的公式所以没注意到后面还有一个优先计算的地方而已……
同样也是 *1.0 解决
作者: kaveil    时间: 2016-3-18 23:03
喵呜喵5 发表于 2016-3-18 19:47
少年,别光顾着看最后,前面的分析也看一遍啊!我只是没看完你全部的公式所以没注意到后面还有一个优先计 ...

哦哦,把你之前公式1.0*a.mat*5/b.mdf*2.5*(2-1.0*a.mp / a.mmp)
改成a.mat*5/b.mdf*2.5*(2-a.mp*1.0/a.mmp)后测试成功了
挪动了一下1.0的位置
我以为你说的机制是只要乘除运算中包含有小数就行
看来实际机制是引用的能力值中间必须插入一个小数
所以1.0*a.mp/a.mmp返回的是整数而a.mp*1.0/a.mmp返回的就是小数了
作者: 喵呜喵5    时间: 2016-3-18 23:24
本帖最后由 喵呜喵5 于 2016-3-18 23:27 编辑
kaveil 发表于 2016-3-18 23:03
哦哦,把你之前公式1.0*a.mat*5/b.mdf*2.5*(2-1.0*a.mp / a.mmp)
改成a.mat*5/b.mdf*2.5*(2-a.mp*1.0/a.m ...


不是,之前我只是我没看你后半部分的公式所以后面那个1.0没加而已

这么理解:
1.0*3/2+3/2 => 1.5+1 => 2.5
3/2+1.0*3/2 => 1+1.5 => 2.5
1.0*3/2+1.0*3/2 => 1.5+1.5 => 3.0

整数与整数运算结果为整数
整数与小数运算结果为小数
小数与小数运算结果为小数

整数与小数的转换是在运算过程中转换的,不是转换好了再统一运算的
作者: 2568567885    时间: 2016-3-21 22:22
调用to_f方法      rgss3里面好像可以将整数转化为浮点数,不过有点死板。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1