Project1

标题: 真正鸡肋: RM文件浏览器 [打印本页]

作者: 沙漠点灰    时间: 2011-4-16 15:49
标题: 真正鸡肋: RM文件浏览器
这个是更新版本子选项的范例工程....这

个工程可以浏览游戏根目录的文件,
并且可以打开txt文件(为了偷懒,不能自动换行,不能翻页....),图片文件,音乐文件,当然,大家可以自

己扩展!截图如下:




当然,这个需要更新版本子选项脚本,以及文字渐变脚本,这个"浏览器"代码如下:

注意:因为不明原因,无法识别第二级中文文件夹(只能识别第一级),并且换了操作系统之后,出现了
迭代太深的错误(原系统没问题,所以测试的时候,极可能出现bug...)
  1. #==============================================================================
  2. # ■ Graphics
  3. #------------------------------------------------------------------------------
  4. #  更待指定帧数
  5. #==============================================================================
  6. def Graphics.wait(n)
  7.   n.times{self.update;yield if defined? yield}
  8. end
  9. #==============================================================================
  10. # ■ Scene_File_Scan
  11. #------------------------------------------------------------------------------
  12. #  RM 文件浏览器
  13. #==============================================================================

  14. class Scene_File_Scan
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     # 穷举文件
  20.     old_d =  Dir.pwd
  21.     @true_files = Dir["*"]
  22.     for i in 0...@true_files.size
  23.       @true_files[i] = directory(@true_files[i],true) if directory?(@true_files[i])
  24.     end
  25.     Dir.chdir(old_d)
  26.     @files = directory!
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 循环操作文件夹
  30.   #--------------------------------------------------------------------------
  31.   def directory(filename,first=false)
  32.     now_d = Dir.pwd
  33.     Dir.chdir("#{filename}/")
  34.     files = Dir["*"]
  35.     Dir.chdir(now_d)
  36.     return "#{filename}(空文件夹)" if files.size == 0
  37.     return [filename] + files if first
  38.     for i in 0...files.size
  39.       if directory?(files[i])
  40.         files[i] = directory(files[i])
  41.       end
  42.     end
  43.     [filename] + files
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 循环操作文件夹
  47.   #--------------------------------------------------------------------------
  48.   def directory!(filename=@true_files)
  49.     array = []
  50.     for unit in filename
  51.       unit.is_a?(Array) ? array << directory!(unit) : array << File.basename(unit)
  52.     end
  53.     array
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 是文件夹? 默认不支持中文全角符号,只有再定义了...
  57.   #--------------------------------------------------------------------------
  58.   def directory?(filename)
  59.     begin
  60.       file = File.open("#{filename}/test.txt","wb")
  61.     rescue
  62.       return false
  63.     end
  64.     file.close
  65.     File.delete("#{filename}/test.txt")
  66.     return true
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 主处理
  70.   #--------------------------------------------------------------------------
  71.   def main
  72.     # 生成窗口
  73.     @helper_window = Window_Help.new
  74.     @folder_window = Window_Folder.new(0,64,640,480-64,@files)
  75.     @helper_window.set_text("名称:#{file_name}    #{file_kind(file_name)[0]}")
  76.     # 执行过渡
  77.     Graphics.transition
  78.     # 主循环
  79.     loop do
  80.       # 刷新游戏画面
  81.       Graphics.update
  82.       # 刷新输入信息
  83.       Input.update
  84.       # 刷新画面
  85.       update
  86.       # 如果画面被切换的话就中断循环
  87.       if $scene != self
  88.         break
  89.       end
  90.     end
  91.     # 准备过渡
  92.     Graphics.freeze
  93.     # 释放窗口
  94.     @folder_window.dispose
  95.     @helper_window.dispose
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 刷新画面
  99.   #--------------------------------------------------------------------------
  100.   def update
  101.     # 刷新窗口
  102.     @folder_window.update
  103.     # C键被按下的情况下
  104.     if Input.repeat?(Input::DOWN) or Input.repeat?(Input::UP)
  105.       # eval("@true_files#{@folder_window.index.new_to_s}")
  106.       @helper_window.set_text("名称:#{file_name}    #{file_kind(file_name)[0]}")
  107.     end
  108.     if Input.trigger?(Input::C) and @folder_window.c
  109.       $game_system.se_play($data_system.decision_se)
  110.       case file_kind(file_name)[1]
  111.       when 1
  112.         text = File.open(file_name).read.split("\n")
  113.         window = Window_Base.new(-640,64,640, 480-64)
  114.         window.contents = Bitmap.new(640-32,text.size*32)
  115.         window.z = 999
  116.         color1 = Color.new(255,  0,  0)
  117.         color2 = Color.new(255,255,255)
  118.         for i in 0...text.size
  119.           len = window.contents.text_size(text[i]).width
  120.           window.contents.draw_text(0,i*32,len,32,text[i],0,[8,color1,color2])
  121.         end
  122.         window.move_to(0,64,20)
  123.         Graphics.wait(20){window.update}
  124.         loop do
  125.           Graphics.update
  126.           Input.update
  127.           break if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  128.         end
  129.         window.move_to(-640,64,20)
  130.         Graphics.wait(20){window.update}
  131.         window.dispose
  132.       when 2
  133.         
  134.       when 3
  135.         bitmap = Bitmap.new(file_name)
  136.         window = Window_Base.new(640,0,bitmap.width+32, bitmap.height + 32)
  137.         window.contents = bitmap
  138.         window.z = 999
  139.         window.move_to((640 - window.width)/2,(480 - window.height)/2,20)
  140.         Graphics.wait(20){window.update}
  141.         loop do
  142.           Graphics.update
  143.           Input.update
  144.           break if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  145.         end
  146.         window.move_to(640,0,20)
  147.         Graphics.wait(20){window.update}
  148.         bitmap.dispose
  149.         window.dispose
  150.       when 4
  151.         Audio.bgm_play(file_name)
  152.       else
  153.         @helper_window.set_text("不可识别的文件类型")
  154.         Graphics.wait(20)
  155.         @helper_window.set_text("名称:#{file_name}    #{file_kind(file_name)[0]}")
  156.       end
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 文件名称
  161.   #--------------------------------------------------------------------------
  162.   def file_name(array=@true_files,index=@folder_window.index)
  163.     return get_command_name(array[index[0]]) if index.size == 1
  164.     file_name array[index[0]],index[1...index.size]
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 再次 取得项目名称
  168.   #--------------------------------------------------------------------------
  169.   def get_command_name(name_array)
  170.     name_array.is_a?(String) ? name_array : name_array[0].is_a?(Array) ?  get_command_name

  171. (name_array[0]) : name_array[0]
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 文件类型
  175.   #--------------------------------------------------------------------------
  176.   def file_kind(filename)
  177.     extname = File.extname(filename).downcase
  178.     case extname
  179.     when ".txt"
  180.       return "txt文本档案", 1
  181.     when ".rxdata"
  182.       return "RMXP用文件" , 2
  183.     when ".png"
  184.       return "png位图"    , 3
  185.     when ".bmp"
  186.       return "bmp位图"    , 3
  187.     when ".jpg"
  188.       return "jpg图像"    , 3
  189.     when ".mp3"
  190.       return "mp3音频文件", 4
  191.     when ".wav"
  192.       return "波形录音"   , 4
  193.     when ".mid"
  194.       return "MIDI文件"   , 4
  195.     when ".ogg"
  196.       return "ogg音频文件", 4
  197.     when  ".wma"
  198.       return "wma音频文件", 4
  199.     else
  200.       a = extname == "" ? (directory?(filename) ? "夹" : "") : ""
  201.       a = "夹" if filename.include?("(空文件夹)")
  202.       return "#{extname[1...extname.size]}文件#{a}",0
  203.     end
  204.   end
  205. end
  206. #==============================================================================
  207. # ■ Window_Base
  208. #------------------------------------------------------------------------------
  209. #  游戏中全部窗口的超级类。
  210. #==============================================================================

  211. class Window_Base < Window
  212.   #--------------------------------------------------------------------------
  213.   # ● 初始化
  214.   #--------------------------------------------------------------------------
  215.   alias isa_dust_initialize initialize
  216.   def initialize(*a)
  217.     isa_dust_initialize(*a)
  218.     @move_count = 0
  219.     @move_to_x  = 0
  220.     @move_to_y  = 0
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 真 移动
  224.   #--------------------------------------------------------------------------
  225.   def move_to(x,y,count)
  226.     @move_to_x = x
  227.     @move_to_y = y
  228.     @move_count= count
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 刷新
  232.   #--------------------------------------------------------------------------
  233.   alias isa_dust_update update
  234.   def update
  235.     isa_dust_update
  236.     # 移动完毕时,直接返回
  237.     return if @move_count <= 0
  238.     self.x += (@move_to_x - self.x)/@move_count.to_f
  239.     self.y += (@move_to_y - self.y)/@move_count.to_f
  240.     @move_count -= 1
  241.   end
  242. end
复制代码
范例: RM文件浏览器.rar (358.27 KB, 下载次数: 214)

000.PNG (68.64 KB, 下载次数: 21)

000.PNG

作者: wzhjii0    时间: 2011-4-17 21:08
表示没用啊,蛋疼
作者: 精灵使者    时间: 2011-4-18 11:29
这个有用的……可以做为鉴赏的cg类




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1