扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 133|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10607
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13376

    灌水之王

    发表于 2024-4-19 17:36:00 | 显示全部楼层 |阅读模式


    Part 1 错误类型解析速查

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


    正文
    【Syntax Error】
    ■ F1 若出现语法错误时就会引发该异常。  
    出现频度 ★★★★★(频发)
    出现时机
    a 真正的语法错误。
    ex
    执行
    1. a = [0)复制代码
    复制代码
    b 配套缺失。这也是诸多Syntax的主要原因。常见的有:少了若干个end,少了若干个]、)、}等等
    注意:这种错误的报错位置在实际错误位置之后若干行。当你看到一个空行、一个end行,甚至是注释行报错时,一般就是这种类型
    ex
    I.end过少
    1. class A  def initialize(v)    if v != 0      @v = v    end  end复制代码
    复制代码
    II end过多
    1. class B  def initialize(v)    p v if v == 0     end  endend复制代码
    复制代码
    注:需要配置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   def initialize    super(0,0,120,120)    self.contents = Bitmap.new(@width - 32,@height - 32)  end  def update    self.contents.draw_text(0,0,88,88,"It's a test~~~")  endenda = Window_A.new复制代码
    复制代码
    II 不符合基类的方法重载(这个错误有的时候非常能迷惑人)
    1. class Sprite_A < Sprite  def initialize(str)    super    @str = str  endenda = Sprite_A.new复制代码
    复制代码
    唯一注意的是:super后面如果不加括号,那么系统将直接将本方法的参数传递给基类的同名方法。

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

    【EOF Error】
    ■ F1 若到达 EOF(End Of File)时就会引发该异常。
    出现频度  ★☆(罕见)
    出现时机
    常常出现有关于存档画面的脚本中,但是非常少见。(存档脚本冲突有时会出现。)
    ex
    1. a = File.open("Data/Actors.rxdata")b = Marshal.load(a)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 = 100p Just_num复制代码
    复制代码
    【NoMethod Error】
    ■ F1  若调用了未定义的方法时,就会引发该异常。
    出现频度 ★★★★★(频发)
    出现时机
    a 真正的未定义方法错误
    ex
    在事件脚本中执行:
    1. hello()复制代码
    复制代码
    小贴士:要在事件脚本中执行的方法在Interpreter类中,无论哪里都能执行的方法在Kernel模块中。
    b 模块的困惑
    ex
    I
    1. module A  def call    p "call"  endendA.call复制代码
    复制代码
    II 模块、数值类没有new方法
    1. a = Fixnum.new复制代码
    复制代码
    c 继承引起的错误
    ex
    d nil的NoMethod错误(包括nil的加减乘除)
    ex
    1. a = nil + 6b = nil * 8复制代码
    复制代码
    不要说这种错误不会有人这么傻,下面的这个脚本错误就很可以迷惑人
    1. a = [3,4,5]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  alias old_init initialize  def initialize(*paras)    old_init(*paras)  endendclass Scene_Map  alias old_init initialize  def initialize(*paras)    old_init(paras,1)  endend复制代码
    复制代码
    注意:最常见的触发方式是,一些已经alias过的语句,按F12以后,游戏崩溃。具体触发条件不明。如有见解,欢迎指出。

    【Type Error】
    ■ F1 若使用了错误的类型时,就会引发该异常。
    出现频度 ★★☆(比较少见)
    出现时机
    在脚本冲突当中非常少见,但是在脚本编写中经常见到。常见的有Fixnum to String,String to Fixnum,nil to Fixnum,nil to String
    ex
    I Fixnum to String
    1. num = 6b = "Hello" + num复制代码
    复制代码
    II String to Fixnum
    1. num = 6b = num + "Hello"复制代码
    复制代码
    不要因为仅仅是顺序交换而弹出不同的出错信息而困惑——因为它无关紧要。
    注意:解决该种问题可以使用to_s方法,但是很多时候可能要用inspect方法。下面的代码也许可以帮助你理解。
    1. array = [3,4,5]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_Dadef main  @viewport1 = Viewport.new(0,0,640,480)  @viewport2 = Viewport.new(0,0,640,480)  @viewport1.z = 300  @viewport2.z = 1000  @sprite1 = Sprite.new(@viewport1)  @sprite2 = Sprite.new(@viewport2)  @sprite1.z = 99999  @sprite2.z = -99999  @sprite1.bitmap = Bitmap.new(100,100)  @sprite2.bitmap = Bitmap.new(100,100)  @sprite1.bitmap.fill_rect(0,0,100,100,Color.new(255,0,0))  @sprite2.bitmap.fill_rect(0,0,100,100,Color.new(0,255,0))  @sprite2.x = 50  Graphics.transition  loop do    Graphics.update    Input.update    update    if $scene != self      break    end  end  Graphics.freeze  @sprite1.dispose  @sprite2.disposeenddef update  @sprite2.update  @sprite1.updateendend复制代码
    复制代码
    呼出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 事件指令代码、参数列表


    太长了,上传= =
                 本帖来自P1论坛作者IamI,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=128835  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-14 23:09 , Processed in 0.133942 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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