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

Project1

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

脚本求解释

 关闭 [复制链接]

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

跳转到指定楼层
1
发表于 2009-2-15 02:11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
柳之一的错误提示脚本
  1. module ERRSettings
  2. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  3. #请设置以下东东
  4. # 游戏测试的时候,是否保存错误信息?(true是false不是)
  5. SaveErrorData = true

  6. # 回溯跟踪错误的文件名
  7. BackTraceFileName = "Backtrace.txt"
  8. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  9. end

  10. module RPG
  11. module_function
  12. def version
  13.    case
  14.      when defined? Hangup then 1.0
  15.      else 2.0
  16.    end
  17. end
  18. def debug?
  19.    $TEST or $DEBUG
  20. end
  21. end
  22. class Reset < Exception
  23. end
  24. class ScriptInterpreter

  25. include ERRSettings
  26. CallSystemError = true
  27. def run
  28.    Graphics.freeze
  29.    $scene = Scene_Title.new
  30.    $scene.main until $scene.nil?
  31.    Graphics.transition(RPG.version == 1 ? 20 : 30)
  32.    exit
  33. rescue Reset => exp
  34.    raise
  35. rescue SystemExit => exp
  36.    raise
  37. rescue Exception => exp
  38.    exception(exp)
  39.    exit
  40. end

  41. private

  42. def exception(exp)
  43.    save_backtrace(exp) if SaveErrorData or RPG.debug?
  44.    print(get_error_message(exp))
  45.    raise if CallSystemError and RPG.debug?
  46. end

  47. def get_error_message(exp)
  48.    if RPG.debug?
  49.      bt = BackTrace.get_backtraces(exp.backtrace)
  50.      
  51.      if exp.class.to_s=="SyntaxError"
  52.        $outexp="语法错误"
  53.      elsif exp.class.to_s=="NameError"
  54.        $outexp="变量未定义"
  55.      elsif exp.class.to_s=="NoMethodError"
  56.        $outexp="方法未定义"
  57.      elsif exp.class.to_s=="NoMemoryError"
  58.        $outexp="内存占有过大"
  59.      elsif exp.class.to_s=="ArgumentError"
  60.        $outexp="参数错误"   #如果愿意此处可以自定义添加
  61.      else
  62.        $outexp=exp.class.to_s
  63.      end

  64.      msg  = "◆ 发生错误\n"
  65.      msg += "\n66RPG提醒您:请养成备份游戏文件的习惯。\n \n"
  66.      msg += "错误类型 :\n\t#{$outexp}\n"
  67.      msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  68.      msg += "错误可能发生的相关位置 :"
  69.      bt.each do |i|
  70.        msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  71.        msg += " : #{i.method_name}" if i.method_name
  72.      end
  73.      msg += "  \n非常荣幸能为您发送错误报告\n"
  74.    else
  75.      msg  = "内部发生错误强制结束。\n"
  76.      msg += "66RPG提醒您:请养成备份游戏文件的习惯。\n"
  77.      msg += "▲错误报告文件「#{BackTraceFileName}」已经保存。\n\n"
  78.      msg += "  非常荣幸能为您发送错误报告\n"
  79.    end
  80.    msg
  81. end

  82. def save_backtrace(exp)
  83.    bt = BackTrace.get_backtraces(exp.backtrace)
  84.    
  85.      if exp.class.to_s=="SyntaxError"
  86.        $outexp="语法错误"
  87.      elsif exp.class.to_s=="NameError"
  88.        $outexp="变量未定义"
  89.      elsif exp.class.to_s=="NoMethodError"
  90.        $outexp="方法未定义"
  91.      elsif exp.class.to_s=="NoMemoryError"
  92.        $outexp="内存占有过大"
  93.      elsif exp.class.to_s=="ArgumentError"
  94.        $outexp="参数错误"   #如果愿意此处可以自定义添加
  95.      else
  96.        $outexp=exp.class.to_s
  97.      end
  98.    
  99.    msg  = "◆ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}\n"
  100.    msg += "错误类型 :\n\t#{$outexp}\n"
  101.    msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  102.    msg += "错误可能发生的相关位置 :"
  103.    bt.each do |i|
  104.      msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  105.      msg += " : #{i.method_name}" if i.method_name
  106.    end
  107.    msg += "\n-------------66RPG-------------------\n"
  108.    File.open(BackTraceFileName, "a") do |file|
  109.      file.write(msg)
  110.    end
  111. end
  112. end

  113. # 回溯跟踪错误的类
  114. class BackTrace  
  115. BacktraceRegexp = /^Section([0-9]+):([0-9]+)(:in `(.+)')?$/
  116. def self.get_backtraces(bt)
  117.    r = []
  118.    bt.each do |i|
  119.      r << self.new(i)
  120.    end
  121.    r
  122. end  
  123. def initialize(line)
  124.    name, @line_no, @method_name =
  125.                                    BacktraceRegexp.match(line).to_a.values_at(1,2,4)
  126.    @name = get_section_name(name)
  127. end  
  128. attr_accessor :name
  129. attr_accessor :line_no
  130. attr_accessor :method_name  
  131. private
  132. def get_section_name(index)
  133.    $RGSS_SCRIPTS[index.to_i][1]
  134. end
  135. end
  136. begin
  137. si = ScriptInterpreter.new
  138. si.run
  139. end

复制代码

解释一下下面的句子
45行,140行,private
36行,rescue Reset => exp
版务信息:本贴由楼主自主结贴~
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上

Lv1.梦旅人

彩色的银子

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

贵宾

2
发表于 2009-2-15 02:21:59 | 只看该作者
Hangup
貌似是看是否定义了Hangup这么一个类。。
简单的看了一下.
应该是判断RM是VX还是XP
因为XP的10S异常就是Hangup

private
貌似就是不公开访问的函数..
例如
class A
private
def orz
return 1
end
end
a = A.new
p a.orz # Erro

rescue
捕捉异常..

至于后面的=>就不太清楚了


msg

RUBY的每个函数都会返回一个对象..

如果函数内无return
的话则返回最后一行的内容
例如

def a
  "囧"
  "orz"
end
p a # orz

a = []
a << 1
p a # [1]
<< == push

同msg

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
-.-
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

3
 楼主| 发表于 2009-2-15 02:31:19 | 只看该作者
以下引用神思于2009-2-14 18:21:59的发言:
private
貌似就是不公开访问的函数..

如果是这样的话,那加上这个命令完全没有意义嘛
我把private前面加上个p,弹出ScriptInterpreter
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

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

贵宾

4
发表于 2009-2-15 02:33:29 | 只看该作者
怎么说呢...
可以内部访问

  1. class A
  2.   def a
  3.     return b
  4.   end
  5.   private
  6.   def b
  7.     return "aa"
  8.   end
  9. end
  10. a = A.new
  11. p a.a
复制代码
-.-
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

5
 楼主| 发表于 2009-2-15 02:36:30 | 只看该作者
上面的代码跟不加private有什么区别吗{/fd}
有那句p出的是"aa"没有也是"aa"


还有,像Hangup这样的东西貌似F1里没有介绍,是怎么得到这个名字的
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-12-20
帖子
213
6
发表于 2009-2-15 02:38:40 | 只看该作者
以下引用zh99998于2009-2-14 18:36:30的发言:

上面的代码跟不加private有什么区别吗
有那句p出的是"aa"没有也是"aa"



还有,像Hangup这样的东西貌似F1里没有介绍,是怎么得到这个名字的


[本贴由作者于 2009-2-14 18:37:46 最后编辑]


写程序不一定结果一样 意义就一样。。。 规范 原则 等很重要。。。

百度。。等
哼哼。。。。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

7
 楼主| 发表于 2009-2-15 02:40:31 | 只看该作者
没见过哪个规范里要private
RM默认脚本里也没见到有private
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

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

贵宾

8
发表于 2009-2-15 02:41:21 | 只看该作者
基本没区别
可能是个人癖好吧...

这.在下就不太了解了..
-.-
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-12-20
帖子
213
9
发表于 2009-2-15 02:42:54 | 只看该作者
以下引用zh99998于2009-2-14 18:40:31的发言:

没见过哪个规范里要private
RM默认脚本里也没见到有private


。。。接口设计那些很重要的。。 很多东西不打算提供外部接口的。。 什么规范那些 很多都是软件工程里呢。。- -bb
哼哼。。。。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

10
 楼主| 发表于 2009-2-15 02:43:06 | 只看该作者
{/fd}楼上是真明白还是猜的
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-10 17:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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