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

Project1

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

[原创发布] 速查列表三份(错误类型查询,z值判定,事件指令查询)

 关闭 [复制链接]

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

跳转到指定楼层
1
发表于 2009-7-16 13:29:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 IamI 于 2009-7-16 17:44 编辑



Part 1 错误类型解析速查

昨天看见群上有人要就写了一份,每一种错误后面都配置了触发代码
如有不尽如人意或错误之处,欢迎指出。
(我怎么觉得没什么大用- -)


正文
【Syntax Error】
■ F1 若出现语法错误时就会引发该异常。  
出现频度 ★★★★★(频发)
出现时机
a 真正的语法错误。
ex
执行
  1. a = [0)
复制代码
b 配套缺失。这也是诸多Syntax的主要原因。常见的有:少了若干个end,少了若干个]、)、}等等
注意:这种错误的报错位置在实际错误位置之后若干行。当你看到一个空行、一个end行,甚至是注释行报错时,一般就是这种类型
ex
I.end过少
  1. class A
  2.   def initialize(v)
  3.     if v != 0
  4.       @v = v
  5.     end
  6.   end
复制代码
II end过多
  1. class B
  2.   def initialize(v)
  3.     p v if v == 0
  4.     end
  5.   end
  6. end
复制代码
注:需要配置end的语句有:class module def if case begin
III 双引号的缺失
执行
a = "@t = 6;@p = 10;@q = 20
eval(a)
注:需要配置的符号有:[] {} () "" '' //

【Argument Error】
■ F1 若参数个数不对或者参数值错误时,就会引发该异常。
出现频度 ★★★★(常见)
出现时机
a 真正的参数数量错误
ex
执行
  1. $scene = Scene_Map.new(1,2)
复制代码
b 真正的参数类型错误
ex
执行
  1. $scene = Scene_Map.new(true)
复制代码
c 继承引起的参数错误,通常出现在继承类当中,频发于super语句中
ex
I 忘记了指定基类
  1. class Window_A
  2.   def initialize
  3.     super(0,0,120,120)
  4.     self.contents = Bitmap.new(@width - 32,@height - 32)
  5.   end
  6.   def update
  7.     self.contents.draw_text(0,0,88,88,"It's a test~~~")
  8.   end
  9. end

  10. a = Window_A.new
复制代码
II 不符合基类的方法重载(这个错误有的时候非常能迷惑人)
  1. class Sprite_A < Sprite
  2.   def initialize(str)
  3.     super
  4.     @str = str
  5.   end
  6. end

  7. a = Sprite_A.new
复制代码
唯一注意的是:super后面如果不加括号,那么系统将直接将本方法的参数传递给基类的同名方法。

【Index Error】
■ F1 若索引超出范围就会引发该异常。
出现频度 ★(非常罕见)
出现时机
仅有使用Table时才会出现的故障。

【EOF Error】
■ F1 若到达 EOF(End Of File)时就会引发该异常。
出现频度  ★☆(罕见)
出现时机
常常出现有关于存档画面的脚本中,但是非常少见。(存档脚本冲突有时会出现。)
ex
  1. a = File.open("Data/Actors.rxdata")
  2. b = Marshal.load(a)
  3. c = Marshal.load(a)
复制代码
【LocalJump Error】
■ F1 控制结构的跳转点没有发现时会引发该异常。
出现频度 ★(非常罕见)
出现时机
不会在有Goto语句以外的脚本中出现。目前网上流传的脚本中,没有Goto语句。

【Name Error】
■ F1 若使用未定义的变量或常量时就会触发该异常。
出现频度 ★★★☆(比较常见)
出现时机
常常出现于new定义的语句中,修正这类问题时注意:
a Ruby对大小写敏感,因此不能随意修改大小写
ex
执行
  1. $scene = Scene_menu.new
复制代码
b 常量必须全部大写。
ex
执行
  1. JUST_NUM = 100
  2. p Just_num
复制代码
【NoMethod Error】
■ F1  若调用了未定义的方法时,就会引发该异常。
出现频度 ★★★★★(频发)
出现时机
a 真正的未定义方法错误
ex
在事件脚本中执行:
  1. hello()
复制代码
小贴士:要在事件脚本中执行的方法在Interpreter类中,无论哪里都能执行的方法在Kernel模块中。
b 模块的困惑
ex
I
  1. module A
  2.   def call
  3.     p "call"
  4.   end
  5. end
  6. A.call
复制代码
II 模块、数值类没有new方法
  1. a = Fixnum.new
复制代码
c 继承引起的错误
ex
d nil的NoMethod错误(包括nil的加减乘除)
ex
  1. a = nil + 6
  2. b = nil * 8
复制代码
不要说这种错误不会有人这么傻,下面的这个脚本错误就很可以迷惑人
  1. a = [3,4,5]
  2. b = a[3] + 6
复制代码
e 有效区域引起的错误

【Range Error】
■ F1 与范围有关的异常。在进行超出范围的数值变换(从 Bignum 变为 Fixnum)等操作时就会引发该异常。
出现频度 ★(非常罕见)
出现时机
除非进行强类型转换,否则不会出现。

【Float Domain Error】
■ F1 若想将正负无穷或 NaN(Not a Number)变为 Bignum,或与 NaN 进行比较时就会引发该异常。
出现频度 ★(非常罕见)
出现时机
除非人工制造NaN,否则不会出现

【Regexp Error】
■ F1 若未能成功编译正则表达式,则引发该异常。
出现频度 ★★(罕见)
出现时机
不会出现于脚本冲突中,在脚本编写中频发但通常显示为Syntax Error.具体请参看正则表达式教程。

【Runtime Error】
■ F1 运行时异常。当调用了 raise 却未指定异常时,就会引发该异常。
出现频度 ☆(极度罕见)
出现时机
除非编写脚本时错误,否则不会出现。
ex
在最开始执行
  1. raise
复制代码
【SystemStack Error】
■ F1 若栈深度过深的话就会引发该异常。
出现频度 ★★★(一般)
出现时机
已经定义的方法名被再度被alias为相同名的方法。
经常显示为Stack level too deep.alias语句中经常出现的问题,也是一些脚本冲突的主要原因。
ex 加入以下脚本,点击“新游戏”触发。
  1. class Scene_Map
  2.   alias old_init initialize
  3.   def initialize(*paras)
  4.     old_init(*paras)
  5.   end
  6. end
  7. class Scene_Map
  8.   alias old_init initialize
  9.   def initialize(*paras)
  10.     old_init(paras,1)
  11.   end
  12. end
复制代码
注意:最常见的触发方式是,一些已经alias过的语句,按F12以后,游戏崩溃。具体触发条件不明。如有见解,欢迎指出。

【Type Error】
■ F1 若使用了错误的类型时,就会引发该异常。
出现频度 ★★☆(比较少见)
出现时机
在脚本冲突当中非常少见,但是在脚本编写中经常见到。常见的有Fixnum to String,String to Fixnum,nil to Fixnum,nil to String
ex
I Fixnum to String
  1. num = 6
  2. b = "Hello" + num
复制代码
II String to Fixnum
  1. num = 6
  2. b = num + "Hello"
复制代码
不要因为仅仅是顺序交换而弹出不同的出错信息而困惑——因为它无关紧要。
注意:解决该种问题可以使用to_s方法,但是很多时候可能要用inspect方法。下面的代码也许可以帮助你理解。
  1. array = [3,4,5]
  2. p array,array.to_s,array.inspect
复制代码
【ZeroDivision Error】
■ F1 若将某值除以 0 时,就会引发该异常。
出现频度 ★★★(一般)
出现时机
经常出现在一些大型的脚本当中。当然不会有直接/0的语句,但是诸如/@index,/@count的语句中频发。
ex

  1. a = 1/0
复制代码
注意:1/0.0 输出无穷大,0.0/0.0输出NaN,这样可能弹出错误的是在其语句之后。3535的复数脚本也会弹出类似的错误——当然你不会用他。
在佣兵脚本中经常存在一个ZeroDivision Error。

【SystemExit】
■ F1 结束程序的运行。请参考 exit。
出现频度 ☆/★★★★★
每当退出游戏,就会抛出一个System Exit。在实际脚本应用中极度罕见。



Part 2 对z值的探究

这是为一些全动画脚本的z值问题想的焦头烂额的人准备的
请看下面的代码:
  1. class Scene_Da
  2. def main
  3.   @viewport1 = Viewport.new(0,0,640,480)
  4.   @viewport2 = Viewport.new(0,0,640,480)
  5.   @viewport1.z = 300
  6.   @viewport2.z = 1000
  7.   @sprite1 = Sprite.new(@viewport1)
  8.   @sprite2 = Sprite.new(@viewport2)
  9.   @sprite1.z = 99999
  10.   @sprite2.z = -99999
  11.   @sprite1.bitmap = Bitmap.new(100,100)
  12.   @sprite2.bitmap = Bitmap.new(100,100)
  13.   @sprite1.bitmap.fill_rect(0,0,100,100,Color.new(255,0,0))
  14.   @sprite2.bitmap.fill_rect(0,0,100,100,Color.new(0,255,0))
  15.   @sprite2.x = 50
  16.   Graphics.transition
  17.   loop do
  18.     Graphics.update
  19.     Input.update
  20.     update
  21.     if $scene != self
  22.       break
  23.     end
  24.   end
  25.   Graphics.freeze
  26.   @sprite1.dispose
  27.   @sprite2.dispose
  28. end
  29. def update
  30.   @sprite2.update
  31.   @sprite1.update
  32. end
  33. end
复制代码
呼出Scene_Da,结果是z值小的Sprite2在上。所以我认为,z值判定顺序应该如下:

1 判定Viewport的z值大小(未指定Viewport,直接生成Sprite的z值为0),Viewport z值大的,该Viewport里面的Sprite永远在上(不管Sprite的z值)
2 两个Viewport z值相同,取决于Sprite的z值
3 判定两个Sprite z值大小,z值大的在上
4 两个Sprite的z值相同,先生成的在上
5 先后顺序与刷新顺序无关



Part 3 事件指令代码、参数列表


太长了,上传= =
游客,本帖隐藏的内容需要积分高于 30 才可浏览,您当前积分为 0
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

2
发表于 2009-7-16 13:58:19 | 只看该作者
阅读权限30……这是怎么回事
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

3
 楼主| 发表于 2009-7-16 14:01:53 | 只看该作者
OTZ写错了= =去掉就是
附件不能限制积分吗?对于新手来说指令列表没用
zh我上次不是给你过了= =
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
4
发表于 2009-7-16 14:04:51 | 只看该作者
Part 3 事件指令代码、参数列表

小弟不才,不懂~
还请IamI前辈解释~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

5
发表于 2009-7-16 17:39:54 | 只看该作者
本帖最后由 后知后觉 于 2009-7-16 17:43 编辑

把附件插入到文章里去
会得到这样的代码
[ attach]1883[ / attach]
对这个代码进行隐藏 就是那个 hide 按钮
[ hide = 限制的积分 ][ attach ]1883[ / attach ][ / hide]
就能对附件加限制了











你知道得太多了

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-8-15
帖子
98
6
发表于 2009-11-26 19:24:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
7
发表于 2009-11-26 21:49:01 | 只看该作者
很荣幸,三星以上的全见过了。
我爱66RPG,但我讨厌66.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
29 小时
注册时间
2006-9-17
帖子
237
8
发表于 2009-11-27 07:45:39 | 只看该作者
看样子很实用的教学呀。
《睡神怀旧游戏馆》QQ群:513795313
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

9
发表于 2009-12-3 00:44:10 | 只看该作者
SystemStack Error 呢其实是这样的..
def a(level)
  @level = level
  b(@level += 1)
end
def b(level)
  @level = level
  a(@level+=1)
end
@level = 0
begin
  a(@level)
rescue SystemStackError
  p "SystemStackError" , "栈深度#{@level}"
end
-.-
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 05:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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