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

Project1

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

[已经过期] 關於Data_Package的問題(腳本作者:灼眼的夏娜)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
帖子
46
跳转到指定楼层
1
发表于 2010-3-21 21:31:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
小弟曾經使用過本腳本,知道怎麼使用,但是卻發生問題!!

問題發生在解碼部份的第41行:
  1. $data_package.pos = pos[0]
复制代码
但是我不管怎麼改,它就是跟我過不去!!

我參考過這些說明了,但是它卻還是一直發生NoMethodError:

undefined method `[]' for nil:NilClass

是我使用方法錯了嗎??

我把圖片、音樂等等的東西都放在正常執行時的路徑

然後直接執行腳本Data_Package.start

等他說make done後 再用解壓部分腳本蓋上Main

然後再執行遊戲

最後就....錯誤了!!

求各位幫我解決問題!!
  1. #==============================================================================
  2. # ★ 说明部分 ★
  3. #==============================================================================

  4. =begin

  5. 脚本:【制作数据包】

  6. 功能:对图片、音乐资源等进行数据包的制作等。

  7. 说明: 直接用 Data_Package.start 使用。

  8. 作者:灼眼的夏娜

  9. 补充: 在使用此脚本是时请确保所有的音乐图片文件都在游戏目录下。

  10. =end



  11. #==============================================================================
  12. # ★ 脚本部分 ★
  13. #==============================================================================

  14. #==============================================================================
  15. # ■ Data_Package
  16. #------------------------------------------------------------------------------
  17. #  数据包生成的模块。
  18. #==============================================================================

  19. module Data_Package

  20. #--------------------------------------------------------------------------
  21. # ● 开始制作数据包
  22. #--------------------------------------------------------------------------
  23. def self.start
  24.    @old_dir = Dir.pwd
  25.    @resource_type = ["bmp","jpg","png","wav","mp3","ogg","wma","mid"]
  26.    @dump_filenames = []
  27.    @path = ""
  28.    self.next_file(@path)
  29.    Dir.chdir(@old_dir)
  30.    self.make(@dump_filenames)
  31. end

  32. #--------------------------------------------------------------------------
  33. # ● 搜索全部资源文件
  34. #--------------------------------------------------------------------------
  35. def self.next_file(path)
  36.    Dir.chdir(@old_dir)
  37.    Dir.chdir(path) if path != ""
  38.    for f in Dir["*"]
  39.      if FileTest.directory?(f)
  40.        @path = @path + f + "/"
  41.        self.next_file(@path)
  42.      else
  43.        if @resource_type.include? f.split(/\./)[1]
  44.          @dump_filenames.push @path + f
  45.        end
  46.      end
  47.    end
  48.    path_a = path.split(/\//)
  49.    @path = ""
  50.    for i in 0...path_a.size - 1
  51.      @path += path_a[i] + "/"
  52.    end
  53.    Dir.chdir(@old_dir)
  54.    Dir.chdir(@path) if @path != ""
  55. end

  56. #--------------------------------------------------------------------------
  57. # ● 包的生成
  58. #--------------------------------------------------------------------------
  59. def self.make(filenames)
  60.    database = File.open("data_package.dat","wb")
  61.    resource_list = "resource_list = {\n"
  62.    begin
  63.      for name in filenames
  64.        begin
  65.          fr = File.open(name,"rb")
  66.          code = fr.read
  67.          posop = database.pos
  68.          database.write Zlib::Deflate.deflate(code,9)
  69.          posed = database.pos
  70.          resource_list += sprintf("%s=>[%d,%d],\n","\"#{name.split(/\./)[0]}\"",posop,posed)
  71.        rescue
  72.          print "\"#{name}\" can't open"
  73.        ensure
  74.          fr.close
  75.        end
  76.      end
  77.    ensure
  78.      resource_list.slice!(resource_list.size-2,1)
  79.      resource_list += "}\n"
  80.      eval resource_list
  81.      save_data(resource_list,"resource_list.inf")
  82.      database.close
  83.      p 'make done'
  84.      exit
  85.    end
  86. end

  87. end

  88. #==============================================================================
  89. # ★ 结束 ★
  90. #==============================================================================
复制代码
2、解压缩运行部分:


   本帖相关代码如下:
  1. #==============================================================================
  2. # ★ 说明部分 ★
  3. #==============================================================================

  4. =begin

  5. 脚本:【解压数据包以及运行】

  6. 功能:对生成的数据包进行解压以及运行。

  7. 说明: 程序中的$resource_list和$data_package的名字可以更改,

  8.        但要和Main中的名字相同。

  9. 作者:灼眼的夏娜

  10. 补充: 1、用此脚本替换原来的Main脚本即可。
  11.    
  12.        2、$resource_list 和 $data_package 这两个变量最好在脚本的最上面就载入。


  13. =end

  14. #==============================================================================
  15. # ★ 脚本部分 ★
  16. #==============================================================================

  17. #==============================================================================
  18. # ■ File
  19. #------------------------------------------------------------------------------
  20. #  处理文件的类。
  21. #==============================================================================

  22. class File < IO

  23. #--------------------------------------------------------------------------
  24. # ● 解码代码
  25. #--------------------------------------------------------------------------
  26. def self.inflate(filename)
  27.    pos = $resource_list[filename]
  28.    $data_package.pos = pos[0]
  29.    code = $data_package.read(pos[1] - pos[0])
  30.    code = Zlib::Inflate.inflate(code)
  31.    return code
  32. end

  33. end

  34. #==============================================================================
  35. # ■ Bitmap
  36. #------------------------------------------------------------------------------
  37. #  处理位图的类。
  38. #==============================================================================

  39. class Bitmap < Object

  40. #--------------------------------------------------------------------------
  41. # ● 类变量
  42. #--------------------------------------------------------------------------
  43. @@resource_type = [nil,"bmp","jpg","png","wav","mp3","ogg","wma","mid"]

  44. #--------------------------------------------------------------------------
  45. # ● 重定义new方法
  46. #--------------------------------------------------------------------------
  47. def self.new(*str)
  48.    @p = *str
  49.    filetype = @p.split(/\./)[1] if @p.is_a?(String)
  50.    if @p.is_a?(String) and @@resource_type.include? filetype
  51.      filename = @p.split(/\./)[0]
  52.      @fe_code = File.inflate(filename)
  53.      filename = filename.split(/\//)[-1]
  54.      f = File.open(filename+".tem","wb")
  55.      f.write @fe_code
  56.      f.close
  57.      return Bitmap_W17.new(filename+".tem")
  58.    end
  59.    super
  60. end

  61. end

  62. #==============================================================================
  63. # ■ Bitmap_W17
  64. #------------------------------------------------------------------------------
  65. #  Bitmap的子类。
  66. #==============================================================================

  67. class Bitmap_W17 < Bitmap

  68. #--------------------------------------------------------------------------
  69. # ● 重定义initialize方法
  70. #--------------------------------------------------------------------------
  71. def initialize(*str)
  72.    @p = *str
  73.    super(*str)
  74.    File.delete(@p) if @p.is_a?(String) and File.exist?(@p)
  75. end

  76. end

  77. #==============================================================================
  78. # ■ Audio
  79. #------------------------------------------------------------------------------
  80. #  处理声音相关的模块。
  81. #==============================================================================

  82. module Audio

  83. #--------------------------------------------------------------------------
  84. # ● 重载
  85. #--------------------------------------------------------------------------
  86. @w17_bgm = method("bgm_play") if @w17_bgm.nil?
  87. @w17_bgs = method("bgs_play") if @w17_bgs.nil?
  88. @w17_me = method("me_play") if @w17_me.nil?
  89. @w17_se = method("se_play") if @w17_se.nil?

  90. #--------------------------------------------------------------------------
  91. # ● 重载 bgm_play
  92. #--------------------------------------------------------------------------
  93. def self.bgm_play(filename, volume = 100, pitch = 100)
  94.    self.decode(filename, volume, pitch, "@w17_bgm")
  95. end

  96. #--------------------------------------------------------------------------
  97. # ● 重载 bgs_play
  98. #--------------------------------------------------------------------------
  99. def self.bgs_play(filename, volume = 80, pitch = 100)
  100.    self.decode(filename, volume, pitch, "@w17_bgs")
  101. end

  102. #--------------------------------------------------------------------------
  103. # ● 重载 me_play
  104. #--------------------------------------------------------------------------
  105. def self.me_play(filename, volume = 100, pitch = 100)
  106.    self.decode(filename, volume, pitch, "@w17_me")
  107. end

  108. #--------------------------------------------------------------------------
  109. # ● 重载 se_play
  110. #--------------------------------------------------------------------------
  111. def self.se_play(filename, volume = 80, pitch = 100)
  112.    self.decode(filename, volume, pitch, "@w17_se")
  113. end

  114. #--------------------------------------------------------------------------
  115. # ● 解码
  116. #--------------------------------------------------------------------------
  117. def self.decode(filename,volume,pitch,w17_str)
  118.    filename = filename.split(/\./)[0]
  119.    code = File.inflate(filename)
  120.    filename = filename.split(/\//)[-1]
  121.    fw = File.open(filename+".tem","wb")
  122.    fw.write code
  123.    fw.close
  124.    eval("#{w17_str}.call(filename+\".tem\", volume, pitch)")
  125.    File.delete(filename+".tem")
  126. end

  127. end

  128. #==============================================================================
  129. # ■ Main
  130. #------------------------------------------------------------------------------
  131. #  各定义结束后、从这里开始实际处理。
  132. #==============================================================================

  133. begin
  134. #--------------------------------------------------------------------------
  135. # ● 载入数据包和资源列表
  136. #--------------------------------------------------------------------------
  137. $data_package = File.open("data_package.dat","rb")
  138. $resource_list = load_data("resource_list.inf")
  139. # 准备过渡
  140. # 设置系统默认字体
  141. Font.default_name = (["黑体"])
  142. Graphics.freeze
  143. # 生成场景对像 (标题画面)
  144. $scene = Scene_Title.new
  145. # $scene 为有效的情况下调用 main 过程
  146. while $scene != nil
  147.    $scene.main
  148. end
  149. # 淡入淡出
  150. Graphics.transition(20)
  151. rescue Errno::ENOENT
  152. # 补充 Errno::ENOENT 以外错误
  153. # 无法打开文件的情况下、显示信息后结束
  154. filename = $!.message.sub("No such file or directory - ", "")
  155. print("找不到文件 #{filename}。 ")
  156. ensure
  157. $data_package.close
  158. end

  159. #==============================================================================
  160. # ★ 结束 ★
  161. #==============================================================================
复制代码
3、补充说明:
Main中的
$data_package = File.open("data_package.dat","rb")
$resource_list = load_data("resource_list.inf")
这两行可以放到脚本的最上面去,不然也许会出错呢,具体原因自己理解……

其他具体的用法参考每个部分的说明处~
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-12-25 10:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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