注册会员 登录
Project1 返回首页

亿万星辰的深邃空间 https://rpg.blue/?62841 [收藏] [复制] [分享] [RSS]

日志

RGSS 报错分析简论

热度 2已有 573 次阅读2011-9-17 22:10 |个人分类:RGSS杂谈| 分析, 游戏制作, 爱好者

从05年接触RM以来,担任了提问区的版主有了一段时间,广大的RM游戏制作爱好者们除了一些制作思路上的疑惑外,最多的就是脚本报错的问题了,而当我们遇到这样的报错后,应该如何分析系统给出的提示,我认为这点才是最重要的。这次以报错提示为主,着重介绍一些RM里对于各类错误的分析以及解决的思路。当然,个人的水平有限,在这里也仅仅是抛砖引玉。

常见的错误提示中大致分为以下几类:
1、SyntaxError 语法错误
解读:无。
处理:
这类错误比较容易处理,因为多半是因为书写方面的问题而导致的,常见的比如丢括号,丢end等等,这个多数都是可以自行解决的。注意的是如果丢失了end,那么打开脚本编辑器时光标默认是停留在脚本末端,并不是指末端缺少了end。
2、ArgumentError 参数错误
解读:
这种错误的提示一般为:
脚本 ssss 的 rr 行 发生了 ArgumentError
wrong number of arguments(X for Y)
能读懂的朋友见到这样的提示时,应该知道错误的地方是显而易见的,首先错误指出了出错的脚本和位置,以及应有的参数数量Y和实际给定的参数数量X。
处理:
查看对应方法调用时所给的参数,不是多了就是少了,当然如果参数没问题,那就是方法定义的时候数量不对了。
3、NoMethodError 方法定义错误
解读:
这种错误应该是最为常见的错误了,很多朋友在出现脚本问题的时候多半提示的都是这样的:
脚本 ssss 的 rr 行 发生了 ArgumentError
no method 'mmmmm' for ccc:CCCCC
通过提示可以找到出错的脚本和位置,后面的关键点有两个,一个是没有定义过的方法名mmmmm,另一个是调用这个方法的CCCCC类的对象ccc。而ccc和CCCCC,我们更为常见的是nil和NilClass。下面才是重点,这里有很多朋友误认为错误的关键在于方法mmmmm上,因而会出现这样的疑问:“我明明定义过了mmmmm,为什么运行的时候还是报错了?”,还有也有一些朋友对于这个错误提示做出了这样的回答:“定义一下mmmmm方法就好了”、“你定义过mmmmm方法么?”。这都是典型的顾头不顾尾的做法,给出的提示没有看完整就匆忙的做出结论,才会导致错误的地方迟迟没被发现。
处理:出现错误提示后,按F11直接打开出错的脚本,查看调用mmmmm方法的对象ccc的值,如果不能在编辑模式下确定,可以在之前加入“p ccc”来执行一下程序,以确定其具体值是多少(其实必然和预期值不一样,否则也不会出这样的错误了),如果ccc本身处于循环体中,那么查看循环变量是否越界(指的是预期值的边界,比如本来就有5个数,却写了0...6),或者处于循环的数组等变量是否为空或nil;如果为参数传递,则通过p命令加断点找出调用出错的地方,并继续排查。
4、事件操作带来的脚本报错
没错,我说的就是事件操作,而且还是在默认系统下带来的错误,大家可以跟着我试试看。
4.1、删掉玩家的出生点或删掉玩家出生点所在的地图——提示找不到地图MapXXX
4.2、原来敌人会第21号技能,之后技能数据库大小缩减到20,则敌人想要再次使出21号技能时就会报错——未定义scope for nil:NilClass
4.3、物品挂了第11个公共事件,后公共事件数据库缩减到10,则再使用此物品时就会报错——未定义list for nil:NilClass
4.4、还是上面的道理,缩减了图块数据库的大小后导致进入使用对应图块绘制的地图时报错——未定义tileset_name for nil:NilClass

错误并不是坏事,它能够帮我们找出问题并且解决问题,同时也能锻炼我们在编写脚本、制作事件过程中的逻辑性和条理性。遇到错误不要怕,追根朔源的找到出错的根源才是关键,盲目的删除脚本行以及有些朋友总爱说的调整顺序放到Main的前面,这些都不是解决问题的根本方法。

鸡蛋

鲜花

刚表态过的朋友 (0 人)

发表评论 评论 (1 个评论)

回复 fux2 2011-9-18 23:33
禾西sama弄过一个很全的,但是沉了。

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

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

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

GMT+8, 2024-5-6 17:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部