Project1

标题: 时隔半年,今日偶遇RGSS第二BUG…… [打印本页]

作者: 风若·飘絮    时间: 2015-2-21 15:40
标题: 时隔半年,今日偶遇RGSS第二BUG……
本帖最后由 风若·飘絮 于 2015-2-21 19:25 编辑

暑假发现的BUG是,在事件解析器里执行为变量赋值布尔值的操作,会出现前所未有的错误,问遍各大群,无人能解。
最终解决方案:为变量赋值0 or 1来代替布尔值。

今日闲来无事,调试了前几个月的工程,发现部分道具不显示属性附加说明


之后各种抓狂。。把脚本完整的看了一遍,我也是醉了。。发现不了任何问题。
然后,遥望远方的天空,朵朵白云飘过……
之后无意间打通任督二脉,顿觉神清气爽,终于发现了介个BUG(其实也不算BUG,可能是Ruby制定的个性规则罢了,更可能是本菜的无知……)



其实问题就出现在这里,不知道各位前辈能否察觉出来呢?

原因:
在Ruby的规则里,if语句中,elsif只允许运行一次,如果条件都符合,多次出现按照第一个elsif处理,其余的跳过。(话说出现多次判断的情况,elsif在别的语言里完全可以用作if啊)

解决方案:避免使用elsif,用if代替。
作者: 月华风    时间: 2015-2-21 16:16
= = 噗  竟然要回复啊
作者: taroxd    时间: 2015-2-21 16:47
默认的脚本中本来就没有想过变量不是整数的情况吧
作者: chd114    时间: 2015-2-21 17:01
居然回复可见···
作者: 1091160905    时间: 2015-2-21 17:57
回复可见。。。。你逼的呀。。。。不回不行啊。。。。。
作者: 龙和许也    时间: 2015-2-21 18:01
@三途亚梦 把那个主楼的保安系统给我拆了!
作者: 哇哈哈哇哈哈    时间: 2015-2-21 18:16
为什么回复可见+1
作者: XYZ加农炮    时间: 2015-2-21 18:21
本帖最后由 XYZ加农炮 于 2015-2-21 18:22 编辑

什么鬼…………


eleif用case不行吗……
作者: RyanBern    时间: 2015-2-21 20:38
本帖最后由 RyanBern 于 2015-2-21 20:41 编辑

第一个BUG估计是赋值为false的时候游戏会卡死吧。这个问题应该早就被发现了,当时解决的方法特别简单。
RUBY 代码复制
  1. $game_switches[1] = false
  2. # 后面跟一行注释就可以了

嗯,最近说过很多遍了,不提了。
第二个,不能苟同"elsif用作if"的说法。不知道LZ为何有这样的想法呢?
C 代码复制
  1. int x;
  2. scanf("%d", &x);
  3. if(x % 3 == 0)
  4.     printf("x能被3整除");
  5. else if(x % 5 == 0)
  6.     printf("x不能被3整除但是能被5整除");

只用if:
C 代码复制
  1. if(x % 3 == 0)
  2.     printf("x能被3整除");
  3. if(x % 3 != 0 && x % 5 == 0)
  4.     printf("x不能被3整除但是能被5整除");

只用if可读性真的好么?
作者: IamI    时间: 2015-2-21 20:46
本帖最后由 IamI 于 2015-2-21 20:47 编辑

elsif = else if = "如果不符合上述但符合……,则……"
这是基本的理解问题,不是一个 Bug。
我不知道您口中的其他语言是何方神圣,编译器会直接混淆 if 和 elsif 的语义。
作者: zeldafd    时间: 2015-2-22 13:06
的確這個位置應該用IF來取代ELSE IF, 但是只是剛好這個位置的問題.
要是一般情況, 根本不可能用IF來取代, 而所謂的ELSEIF = IF完全不知所云
不論JAVA、C++、PHP還是RUBY, ELSE就是ELSE
其他語言中:

  1. if (condition)
  2. {}
  3. else if (condition)
  4. {}
复制代码
就是ELSE之後再進行IF, 不可能是LZ所指ELSE IF就是IF的說法.
不過這個位置可能只是官方沒想過用家會設定多於一個屬性, 所以只是設計不完善, 跟BUG是兩回事.

好吧, 亂說完了, 有錯請大神指正




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