赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 1048 |
最后登录 | 2023-1-7 |
在线时间 | 18 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 95
- 在线时间
- 18 小时
- 注册时间
- 2008-1-22
- 帖子
- 46
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
小弟曾經使用過本腳本,知道怎麼使用,但是卻發生問題!!
問題發生在解碼部份的第41行:- $data_package.pos = pos[0]
复制代码 但是我不管怎麼改,它就是跟我過不去!!
我參考過這些說明了,但是它卻還是一直發生NoMethodError:
undefined method `[]' for nil:NilClass
是我使用方法錯了嗎??
我把圖片、音樂等等的東西都放在正常執行時的路徑
然後直接執行腳本Data_Package.start
等他說make done後 再用解壓部分腳本蓋上Main
然後再執行遊戲
最後就....錯誤了!!
求各位幫我解決問題!!- #==============================================================================
- # ★ 说明部分 ★
- #==============================================================================
- =begin
- 脚本:【制作数据包】
-
- 功能:对图片、音乐资源等进行数据包的制作等。
-
- 说明: 直接用 Data_Package.start 使用。
- 作者:灼眼的夏娜
-
- 补充: 在使用此脚本是时请确保所有的音乐图片文件都在游戏目录下。
- =end
- #==============================================================================
- # ★ 脚本部分 ★
- #==============================================================================
- #==============================================================================
- # ■ Data_Package
- #------------------------------------------------------------------------------
- # 数据包生成的模块。
- #==============================================================================
- module Data_Package
-
- #--------------------------------------------------------------------------
- # ● 开始制作数据包
- #--------------------------------------------------------------------------
- def self.start
- @old_dir = Dir.pwd
- @resource_type = ["bmp","jpg","png","wav","mp3","ogg","wma","mid"]
- @dump_filenames = []
- @path = ""
- self.next_file(@path)
- Dir.chdir(@old_dir)
- self.make(@dump_filenames)
- end
-
- #--------------------------------------------------------------------------
- # ● 搜索全部资源文件
- #--------------------------------------------------------------------------
- def self.next_file(path)
- Dir.chdir(@old_dir)
- Dir.chdir(path) if path != ""
- for f in Dir["*"]
- if FileTest.directory?(f)
- @path = @path + f + "/"
- self.next_file(@path)
- else
- if @resource_type.include? f.split(/\./)[1]
- @dump_filenames.push @path + f
- end
- end
- end
- path_a = path.split(/\//)
- @path = ""
- for i in 0...path_a.size - 1
- @path += path_a[i] + "/"
- end
- Dir.chdir(@old_dir)
- Dir.chdir(@path) if @path != ""
- end
-
- #--------------------------------------------------------------------------
- # ● 包的生成
- #--------------------------------------------------------------------------
- def self.make(filenames)
- database = File.open("data_package.dat","wb")
- resource_list = "resource_list = {\n"
- begin
- for name in filenames
- begin
- fr = File.open(name,"rb")
- code = fr.read
- posop = database.pos
- database.write Zlib::Deflate.deflate(code,9)
- posed = database.pos
- resource_list += sprintf("%s=>[%d,%d],\n","\"#{name.split(/\./)[0]}\"",posop,posed)
- rescue
- print "\"#{name}\" can't open"
- ensure
- fr.close
- end
- end
- ensure
- resource_list.slice!(resource_list.size-2,1)
- resource_list += "}\n"
- eval resource_list
- save_data(resource_list,"resource_list.inf")
- database.close
- p 'make done'
- exit
- end
- end
-
- end
- #==============================================================================
- # ★ 结束 ★
- #==============================================================================
复制代码 2、解压缩运行部分:
本帖相关代码如下:- #==============================================================================
- # ★ 说明部分 ★
- #==============================================================================
- =begin
- 脚本:【解压数据包以及运行】
-
- 功能:对生成的数据包进行解压以及运行。
-
- 说明: 程序中的$resource_list和$data_package的名字可以更改,
-
- 但要和Main中的名字相同。
- 作者:灼眼的夏娜
-
- 补充: 1、用此脚本替换原来的Main脚本即可。
-
- 2、$resource_list 和 $data_package 这两个变量最好在脚本的最上面就载入。
- =end
- #==============================================================================
- # ★ 脚本部分 ★
- #==============================================================================
- #==============================================================================
- # ■ File
- #------------------------------------------------------------------------------
- # 处理文件的类。
- #==============================================================================
- class File < IO
-
- #--------------------------------------------------------------------------
- # ● 解码代码
- #--------------------------------------------------------------------------
- def self.inflate(filename)
- pos = $resource_list[filename]
- $data_package.pos = pos[0]
- code = $data_package.read(pos[1] - pos[0])
- code = Zlib::Inflate.inflate(code)
- return code
- end
-
- end
- #==============================================================================
- # ■ Bitmap
- #------------------------------------------------------------------------------
- # 处理位图的类。
- #==============================================================================
- class Bitmap < Object
-
- #--------------------------------------------------------------------------
- # ● 类变量
- #--------------------------------------------------------------------------
- @@resource_type = [nil,"bmp","jpg","png","wav","mp3","ogg","wma","mid"]
-
- #--------------------------------------------------------------------------
- # ● 重定义new方法
- #--------------------------------------------------------------------------
- def self.new(*str)
- @p = *str
- filetype = @p.split(/\./)[1] if @p.is_a?(String)
- if @p.is_a?(String) and @@resource_type.include? filetype
- filename = @p.split(/\./)[0]
- @fe_code = File.inflate(filename)
- filename = filename.split(/\//)[-1]
- f = File.open(filename+".tem","wb")
- f.write @fe_code
- f.close
- return Bitmap_W17.new(filename+".tem")
- end
- super
- end
- end
- #==============================================================================
- # ■ Bitmap_W17
- #------------------------------------------------------------------------------
- # Bitmap的子类。
- #==============================================================================
- class Bitmap_W17 < Bitmap
-
- #--------------------------------------------------------------------------
- # ● 重定义initialize方法
- #--------------------------------------------------------------------------
- def initialize(*str)
- @p = *str
- super(*str)
- File.delete(@p) if @p.is_a?(String) and File.exist?(@p)
- end
-
- end
- #==============================================================================
- # ■ Audio
- #------------------------------------------------------------------------------
- # 处理声音相关的模块。
- #==============================================================================
- module Audio
- #--------------------------------------------------------------------------
- # ● 重载
- #--------------------------------------------------------------------------
- @w17_bgm = method("bgm_play") if @w17_bgm.nil?
- @w17_bgs = method("bgs_play") if @w17_bgs.nil?
- @w17_me = method("me_play") if @w17_me.nil?
- @w17_se = method("se_play") if @w17_se.nil?
- #--------------------------------------------------------------------------
- # ● 重载 bgm_play
- #--------------------------------------------------------------------------
- def self.bgm_play(filename, volume = 100, pitch = 100)
- self.decode(filename, volume, pitch, "@w17_bgm")
- end
-
- #--------------------------------------------------------------------------
- # ● 重载 bgs_play
- #--------------------------------------------------------------------------
- def self.bgs_play(filename, volume = 80, pitch = 100)
- self.decode(filename, volume, pitch, "@w17_bgs")
- end
-
- #--------------------------------------------------------------------------
- # ● 重载 me_play
- #--------------------------------------------------------------------------
- def self.me_play(filename, volume = 100, pitch = 100)
- self.decode(filename, volume, pitch, "@w17_me")
- end
-
- #--------------------------------------------------------------------------
- # ● 重载 se_play
- #--------------------------------------------------------------------------
- def self.se_play(filename, volume = 80, pitch = 100)
- self.decode(filename, volume, pitch, "@w17_se")
- end
-
- #--------------------------------------------------------------------------
- # ● 解码
- #--------------------------------------------------------------------------
- def self.decode(filename,volume,pitch,w17_str)
- filename = filename.split(/\./)[0]
- code = File.inflate(filename)
- filename = filename.split(/\//)[-1]
- fw = File.open(filename+".tem","wb")
- fw.write code
- fw.close
- eval("#{w17_str}.call(filename+\".tem\", volume, pitch)")
- File.delete(filename+".tem")
- end
- end
- #==============================================================================
- # ■ Main
- #------------------------------------------------------------------------------
- # 各定义结束后、从这里开始实际处理。
- #==============================================================================
- begin
- #--------------------------------------------------------------------------
- # ● 载入数据包和资源列表
- #--------------------------------------------------------------------------
- $data_package = File.open("data_package.dat","rb")
- $resource_list = load_data("resource_list.inf")
- # 准备过渡
- # 设置系统默认字体
- Font.default_name = (["黑体"])
- Graphics.freeze
- # 生成场景对像 (标题画面)
- $scene = Scene_Title.new
- # $scene 为有效的情况下调用 main 过程
- while $scene != nil
- $scene.main
- end
- # 淡入淡出
- Graphics.transition(20)
- rescue Errno::ENOENT
- # 补充 Errno::ENOENT 以外错误
- # 无法打开文件的情况下、显示信息后结束
- filename = $!.message.sub("No such file or directory - ", "")
- print("找不到文件 #{filename}。 ")
- ensure
- $data_package.close
- end
- #==============================================================================
- # ★ 结束 ★
- #==============================================================================
复制代码 3、补充说明:
Main中的
$data_package = File.open("data_package.dat","rb")
$resource_list = load_data("resource_list.inf")
这两行可以放到脚本的最上面去,不然也许会出错呢,具体原因自己理解……
其他具体的用法参考每个部分的说明处~ |
|