Project1

标题: RM1.02伤害计算中小数点问题. [打印本页]

作者: jhhuang    时间: 2010-7-1 06:44
标题: RM1.02伤害计算中小数点问题.
本帖最后由 jhhuang 于 2010-7-1 08:21 编辑

不知道最新版有没有这些问题...我习惯使用1.02了...
也不知道是不是问题.
今天在编辑Game_Battler中发现几个问题.
当使用特技时.
  1.     # 第一命中判定
  2.     hit = skill.hit
  3.     if skill.atk_f > 0
  4.       hit *= user.hit / 100
  5.     end
  6.     hit_result = (rand(100) < hit)
复制代码
hit *= user.hit / 100
打个比方:使用者命中为85时.就会因为除于100得出有小数导致结果为0.
战斗测试:
p user.hit
p hit
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
p user.hit
p hit

四次输出结果:
85
100
85
0
很多地方都这样= =都不说了..先搞清楚是不是BUG.
PS:不是求解决方法=.=
作者: 亿万星辰    时间: 2010-7-1 07:43
hit *= 0.1 * user.hit / 100
这样不是就有小数了……也不至于中个状态就不能用与攻击力有挂钩的技能了……
作者: IamI    时间: 2010-7-1 07:55
我记得……hit本身就是浮点数吧……?
作者: jhhuang    时间: 2010-7-1 08:01
本帖最后由 jhhuang 于 2010-7-1 08:09 编辑

我也不知道为什么会变成这样= =我用的是以前某人做的下面的框架(菜单= =).
不知道是不是我不小心改错了什么地方或者这某人改错了...因为经测试,这框架的确存在部分BUG.


不过改的是菜单...Game_Battler应该没改...估计我脚本太多...不知道哪里出错了.
作者: david50407    时间: 2010-7-1 08:03
本帖最后由 david50407 于 2010-7-1 08:04 编辑

应该用 hit = hit * user.hit / 100
或hit *= user.hit / 100.00 (会自动转成浮点数)

因为照原式来说
他会先user.hit / 100 (若user.hit, 100 都是整数, 会舍去小数成整数=> user.hit / 100 = 0 or 1)
再乘上 hit 成为 hit 的值

这是 RUBY 运算的规则
非 BUG
作者: jhhuang    时间: 2010-7-1 08:11
我指的BUG不是RUBY...说的是RM1.02.....
不过那里我怀疑被改过....我一会儿建立个新的工程试下...
作者: david50407    时间: 2010-7-1 08:12
回复jhhuang 的帖子
RM 1.02 用的就是 RUBY 规则通用
作者: jhhuang    时间: 2010-7-1 08:16
本帖最后由 jhhuang 于 2010-7-1 08:19 编辑

我说的是它脚本上的一些错误= =...不,当我说错了...是它游戏上的一些错误.

另外:
经过测试...我新建立一个工程.
阿尔西斯中状态:命中率85%
果然~发生战斗后阿尔西斯99级无法击中幽灵= =
悲剧

请问用RM1.03的大大们有这个问题吗?
作者: david50407    时间: 2010-7-1 08:19
脚本改成
hit = hit * user.hit / 100
或hit *= user.hit / 100.00 (会自动转成浮点数)
作者: jhhuang    时间: 2010-7-1 08:20
本帖最后由 jhhuang 于 2010-7-1 08:21 编辑

没事= =我1楼已经标明
PS:不是求解决方法=.=



实在不好意思...我标题应该改成"讨论"...而不是有事请教.
作者: 紫苏    时间: 2010-7-1 08:21
本帖最后由 紫苏 于 2010-7-1 08:24 编辑

其实这个在大多数语言中都是通用的,两个整数相除,在汇编层实际上是把商和余数分别存在了两个寄存器中,编译器编译出来的代码会只从保存了商的那个寄存器提取数据,而舍弃掉余数,这是整数相除

当你有两个不同精度类型做运算的时候,编译器就会做一个隐式精度提升,把运算中精度小的类型转换成精度大的类型,然后再运算,所以
5/2 = 2,而 5/2.0=2.5,因为这里的 5 会自动被提升到本地双精度浮点类型,这时的除法运算就是浮点数相除了,CPU 有不同的芯片分别处理浮点数相处和整数相除
作者: jhhuang    时间: 2010-7-1 08:22
数字神又出现鸟.....
DIY那边帮大忙了~回来了说声感谢.
作者: zhangbanxian    时间: 2010-7-1 08:37
:funk:还真有这问题,话说我也没有装1.03,测试不能。
作者: jhhuang    时间: 2010-7-1 08:39
本帖最后由 jhhuang 于 2010-7-1 08:42 编辑

话说现在最新版本是RM1.03吗?
求一个带有RM1.03的真相帝....
如果1.02存在BUG实在太多...考虑去下个最新版好了...

刚看了下更新....1.03只是界面优化了下是真的吗?
作者: zhangbanxian    时间: 2010-7-1 08:49
话说现在最新版本是RM1.03吗?
求一个带有RM1.03的真相帝....
如果1.02存在BUG实在太多...考虑去下个最新版 ...
jhhuang 发表于 2010-7-1 08:39

不过以前在别人的电脑上装过1.03,貌似界面也没有优化...






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