设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2527|回复: 6
打印 上一主题 下一主题

[已经解决] 战斗公式设置百分比的问题

[复制链接]

Lv2.观梦者

邪恶米饼殿

梦石
0
星屑
382
在线时间
569 小时
注册时间
2007-12-23
帖子
1584
跳转到指定楼层
1
发表于 2016-3-18 00:16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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)

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9414 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2016-3-18 14:03:07 | 只看该作者
本帖最后由 喵呜喵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)
回复 支持 反对

使用道具 举报

Lv2.观梦者

邪恶米饼殿

梦石
0
星屑
382
在线时间
569 小时
注册时间
2007-12-23
帖子
1584
3
 楼主| 发表于 2016-3-18 16:26:13 | 只看该作者
喵呜喵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不管带不带小数点结果都是一样的

点评

多谢,变量.to_f也有效  发表于 2016-3-18 23:05
比如:(233.0 - (2.0 - a.mp.to_f * 100.0 / a.mmp.to_f)).to_i  发表于 2016-3-18 16:43
实在不行就把常数都改成x.0,然后代码变量都在后面加上.to_f,然后整个公式加上括号括起来,在括号外面加上.to_i。。。。。。。(大雾→_→)  发表于 2016-3-18 16:38
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9414 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
发表于 2016-3-18 19:47:24 | 只看该作者
kaveil 发表于 2016-3-18 16:26
这么改写的话,战斗测试出来的结果是恒定值,而不是动态数值
问题应该出在(2-a.mp / a.mmp)这里
常规情况 ...

少年,别光顾着看最后,前面的分析也看一遍啊!我只是没看完你全部的公式所以没注意到后面还有一个优先计算的地方而已……
同样也是 *1.0 解决
回复 支持 反对

使用道具 举报

Lv2.观梦者

邪恶米饼殿

梦石
0
星屑
382
在线时间
569 小时
注册时间
2007-12-23
帖子
1584
5
 楼主| 发表于 2016-3-18 23:03:00 | 只看该作者
喵呜喵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返回的就是小数了

评分

参与人数 1梦石 +1 收起 理由
丿梁丶小柒 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9414 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

6
发表于 2016-3-18 23:24:36 | 只看该作者
本帖最后由 喵呜喵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

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

整数与小数的转换是在运算过程中转换的,不是转换好了再统一运算的

评分

参与人数 1梦石 +1 收起 理由
丿梁丶小柒 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2015-12-25
帖子
33
7
发表于 2016-3-21 22:22:53 手机端发表。 | 只看该作者
调用to_f方法      rgss3里面好像可以将整数转化为浮点数,不过有点死板。
来自: Android客户端
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 10:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表