Project1

标题: 关于伤害公式插入多变量的问题 [打印本页]

作者: 阿步abu    时间: 2021-1-20 15:42
标题: 关于伤害公式插入多变量的问题
在伤害公式中,让伤害随着单变量的变化而变化,这个我已经懂了
现在出现了新问题
如果一个伤害公式,需要根据两个变量的和来决定伤害该怎么写?
在公式中加入括号似乎解决不了问题
比如核心部分(其余部分判断有效):常量+(A变量+B变量)*系数
这个公式战斗测试中的效果是0……
困惑中……
换一种写法:常量+A变量*系数+B变量*系数
结果还是0……
大神快出现吧~
作者: KB.Driver    时间: 2021-1-21 20:24
盲猜你的伤害公式有错误

根据MV源码,伤害公式计算出错就会返回0。

可能的错误:
1、括号没有使用英文半角字符
2、变量的写法不对,假设是1号和2号变量,应该是 100 + (v[1] + v[2]) * 0.5 这样吧。

顺便,MV的提示似乎没有说可以写v,但是VA支持这样写,而且从源码来看也应该是支持的。

作者: 阿步abu    时间: 2021-1-22 08:57
KB.Driver 发表于 2021-1-21 20:24
盲猜你的伤害公式有错误

根据MV源码,伤害公式计算出错就会返回0。

0 0 为啥你可以打开源码……
MV是支持[v1]这种变量写法的,F1里就有提示……
括号啥的肯定没用错啊……
大佬你说的2、的那个写法,我上面试过了啊,还是会返0……
作者: KB.Driver    时间: 2021-1-22 23:26
阿步abu 发表于 2021-1-22 08:57
0 0 为啥你可以打开源码……
MV是支持[v1]这种变量写法的,F1里就有提示……
括号啥的肯定没用错啊……

1、源码就在游戏目录下的js文件夹里,只要用文本编辑器打开就可以看。

2、我用steam版的MV没看到这样的提示,但是从源码推断是可以这样写的。


3、经过测试,确定是变量未初始化导致的。
简单而言,某个变量没有设置过值的情况下,它是undefined。
undefined是什么你不用管,你只要知道它出现在算式里会出错。
为了消除这种情况,需要你把每一个可能用到变量的地方写成这样,以1号变量为例:
(v[1] || 0)
这样做的目的很明显,如果1号变量已经被赋值,括号的结果就是v[1],
如果1号变量是undefined,括号的结果就是0.
当然,你也可以把这里的0换成其他数值,这样当对应变量没有被赋值过时,会被这个值替代。

修改后的公式有这样的形式:
100 +  ((v[1] || 0) + (v[2] || 0)) * 0.5
作者: 阿步abu    时间: 2021-1-23 09:33
KB.Driver 发表于 2021-1-22 23:26
1、源码就在游戏目录下的js文件夹里,只要用文本编辑器打开就可以看。

2、我用steam版的MV没看到这样的 ...

原来如此?
我去试一下,这个||,就是\键按shift之后的那个吧?不是啥特殊符号或着别的什么吧?
作者: 阿步abu    时间: 2021-1-23 10:58
KB.Driver 发表于 2021-1-22 23:26
1、源码就在游戏目录下的js文件夹里,只要用文本编辑器打开就可以看。

2、我用steam版的MV没看到这样的 ...

大佬大佬,现在出现了一个奇怪的新问题
10+a.mat*(v[1||0]+v[2||0])*1-b.mdf
这个公式,在变量>0时,可以造成伤害,但任一变量为0时,反馈为0
简化之后
10+a.mat*v[1||0]*1-b.mdf——理解成10+X*0*1-Y,变量部分为0的话,这个10也不应该消失的
但是只要变量为0,就会反馈0,那个10无法触发。迷惑中
注:b.mdf肯定小于10,这个没必要进行探讨……
顺带求问(v[x]||0)中的||是啥意思,绝对值?赋值符号?
作者: alexncf125    时间: 2021-1-23 11:11
阿步abu 发表于 2021-1-23 10:58
大佬大佬,现在出现了一个奇怪的新问题
10+a.mat*(v[1||0]+v[2||0])*1-b.mdf
这个公式,在变量>0时,可 ...


(v[x]||0)意思是:
当||左方v[x]是undefined时, (v[x]||0)返回右方的0
当||左方v[x]不是undefined时, (v[x]||0)返回左方的v[x]

至于那v[1||0]和v[2||0]
楼上大佬都没教你这样写...
能不能別自己乱创作...
作者: hsy_999999999    时间: 2021-1-23 13:46
阿步abu 发表于 2021-1-23 10:58
大佬大佬,现在出现了一个奇怪的新问题
10+a.mat*(v[1||0]+v[2||0])*1-b.mdf
这个公式,在变量>0时,可 ...

于: &&  指xx1和xx2
或:||    指不是xx1的话就是xx2
非: !     指不是xxx1

作者: 阿步abu    时间: 2021-1-23 15:45
hsy_999999999 发表于 2021-1-23 13:46
于: &&  指xx1和xx2
或:||    指不是xx1的话就是xx2
非: !     指不是xxx1

0 0 哦~
然后大佬你另一个回复的意思是,这种10+如果不行,就融合到公式里变成5+5吗?那如果写到公式里,当v[1]>0的时候,就变成v[1]+5了……那个10的常量底数就不对了……
作者: 阿步abu    时间: 2021-1-23 15:46
alexncf125 发表于 2021-1-23 11:11
(v[x]||0)意思是:
当||左方v[x]是undefined时, (v[x]||0)返回右方的0
当||左方v[x]不是undefined时, (v[x ...

笔……笔误……嗯……
=。。= 不过……
v[x||0]这种写法在变量不等于0时,确实可以触发,也是很奇妙的一件事呢……
作者: KB.Driver    时间: 2021-1-23 22:41
本帖最后由 KB.Driver 于 2021-1-23 22:43 编辑
阿步abu 发表于 2021-1-23 15:46
笔……笔误……嗯……
=。。= 不过……
v[x||0]这种写法在变量不等于0时,确实可以触发,也是很奇妙的一 ...


无言以对……
自己不懂的话请不要玩小聪明,直接把别人写的复制粘贴一下不好吗?
另外,结果为0的原因我前面说过了,算不出来(输入有误)的式子就会得到0。

||的|是回车键上面的符号没错,或运算是需要两条竖线的,或运算的用途我在前面也举了例子。
如果真的不会的话可以自学一下js,百度搜索javascript菜鸟教程,自己先看一下会比瞎猜要有用。
作者: 阿步abu    时间: 2021-1-24 09:01
KB.Driver 发表于 2021-1-23 22:41
无言以对……
自己不懂的话请不要玩小聪明,直接把别人写的复制粘贴一下不好吗?
另外,结果为0的原因我 ...

没有耍小聪明啊,看到这个问题后已经更改了呢
然后确实是可以触发出非0的结果,很微妙的咧
作者: soulsaga    时间: 2021-1-24 10:36
本帖最后由 soulsaga 于 2021-1-24 10:43 编辑

10+a.mat*(v[1]+v[2])*1-b.mdf
变量1+2=0
10+X*0=0
0*1=0
0-Y=-J

好像不是先乘除而是左边优先的?
作者: 阿步abu    时间: 2021-1-24 11:38
soulsaga 发表于 2021-1-24 10:36
10+a.mat*(v[1]+v[2])*1-b.mdf
变量1+2=0
10+X*0=0

根据大佬的解答,修改成了
10+a.mat*((v[1]||0)+(v[2]||0))*1-b.mdf——(没有笔误,确认过了)
然后应该还有遵循先乘除的这个问题的……
我之后又简单测试了几次,好像是正常了(果然写错了公式会导致很大问题啊……
总之还会继续做些测试,然后过来写总结报告……
作者: KB.Driver    时间: 2021-1-24 12:51
阿步abu 发表于 2021-1-24 09:01
没有耍小聪明啊,看到这个问题后已经更改了呢
然后确实是可以触发出非0的结果,很微妙的咧 ...

我前面的回复就说过了……变量未初始化的问题
直接写v[x]的话,当变量的值已经存在时,是没问题的
但是一旦变量没被赋值过,就会触发错误,代码就会算不出,直接返回0

但是你很难保证每个变量都被事先赋值,除非在游戏一开始就批量赋值。
所以还是要用这个或运算来保证它正常工作
作者: 阿步abu    时间: 2021-1-24 16:32
KB.Driver 发表于 2021-1-24 12:51
我前面的回复就说过了……变量未初始化的问题
直接写v[x]的话,当变量的值已经存在时,是没问题的
但是一 ...

好的,了解
作者: 阿步abu    时间: 2021-1-24 20:56
KB.Driver 发表于 2021-1-22 23:26
1、源码就在游戏目录下的js文件夹里,只要用文本编辑器打开就可以看。

2、我用steam版的MV没看到这样的 ...

大佬大佬,来拓展一下吧~
||←这个东西啊
它的运作原理是啥?
如果写一个公式
a.atk-(b.def||mdf)
会发生什么?哪个数值高就用哪个?
作者: xiamumomo    时间: 2021-1-24 21:58
阿步abu 发表于 2021-1-24 20:56
大佬大佬,来拓展一下吧~
||←这个东西啊
它的运作原理是啥?

1、JS中的||符号:

运算方法:

     只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。

     只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

总结:真前假后
作者: soulsaga    时间: 2021-1-24 22:51
不但再次无视楼里大佬的解说还自己进行了脑补..我就服你..
作者: 阿步abu    时间: 2021-1-25 09:19
soulsaga 发表于 2021-1-24 22:51
不但再次无视楼里大佬的解说还自己进行了脑补..我就服你..

大佬们的解说我已经实际运用了啊,现在是后续拓展脑补的部分了……
作者: 阿步abu    时间: 2021-1-25 09:20
xiamumomo 发表于 2021-1-24 21:58
1、JS中的||符号:

运算方法:

原来如此……不是“或”而是“真前假后”的逻辑吗……那让系统自己判断取什么值还是要用到插件的吗……
作者: KB.Driver    时间: 2021-1-25 09:50
阿步abu 发表于 2021-1-24 20:56
大佬大佬,来拓展一下吧~
||←这个东西啊
它的运作原理是啥?

或运算取的是“真值”(true),JS的真假判断比较复杂,你查一下Javascript的if判断条件就有了
至于取最大,用Math.max(b.def, b.mdf),最小用Math.min(b.def, b.mdf)

实际上这些学会了都是可以举一反三的,自己多看些资料会比一个一个问要快
作者: xiamumomo    时间: 2021-1-25 11:30
这种东西直接百度都有其实我也不懂百度一下你就知道
作者: 阿步abu    时间: 2021-1-25 15:06
xiamumomo 发表于 2021-1-25 11:30
这种东西直接百度都有其实我也不懂百度一下你就知道

=。。= 搜不出来啊,RPGMake的教学资料太少了……
作者: 阿步abu    时间: 2021-1-25 15:07
KB.Driver 发表于 2021-1-25 09:50
或运算取的是“真值”(true),JS的真假判断比较复杂,你查一下Javascript的if判断条件就有了
至于取最 ...

嗷嗷,又掌握了新东西,继续埋头做实验
作者: xiamumomo    时间: 2021-1-25 17:54
阿步abu 发表于 2021-1-25 15:07
嗷嗷,又掌握了新东西,继续埋头做实验

这是RPG群别人写的

狼娘整理的RPGMakerMv伤害公式Ver_0.3.zip

55.45 KB, 下载次数: 56


作者: 阿步abu    时间: 2021-1-25 18:08
xiamumomo 发表于 2021-1-25 17:54
这是RPG群别人写的

(拍肩)好人啊好人啊




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