Project1

标题: 最新截图存档 For RMVX [打印本页]

作者: danny8376    时间: 2008-6-8 01:13
标题: 最新截图存档 For RMVX
这是RMVX的$game_temp.background_bitmap(Graphics.snap_to_bitmap)
加上 柳之一 的 快速存储Bitmap的Marshal
制成的RMVX最新截图存档

截图


范例
http://rpg.blue/upload_program/files/PicSave_93287510.rar

原始脚本
  1. #==============================================================================
  2. # ■ 最新截圖存檔 For RMVX By 釣到一隻猴子@_@ ── AAM@_@
  3. #       Ver.1.0.0.000
  4. #      
  5. #       感謝:柳之一
  6. #==============================================================================


  7. #==============================================================================
  8. # ■ 快速存儲Bitmap的Marshal By 柳之一
  9. #==============================================================================
  10. class Bitmap
  11. # 传送到内存的API函数
  12. RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  13. RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  14. def _dump
  15. data = "rgba" * width * height
  16. RtlMoveMemory_pi.call(data, address, data.length)
  17. [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
  18. end
  19. def self._load(str)
  20. w, h, zdata = str.unpack("LLa*"); b = new(w, h)
  21. RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4); b
  22. end
  23. # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  24. #
  25. def address
  26. buffer, ad = "xxxx", object_id * 2 + 16
  27. RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
  28. RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
  29. RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
  30. end
  31. end
  32. #==============================================================================
  33. # ■ Window_SaveFile
  34. #------------------------------------------------------------------------------
  35. #  显示存档以及读档画面、保存文件的窗口。
  36. #==============================================================================

  37. class Window_SaveFile < Window_Base
  38.   #--------------------------------------------------------------------------
  39.   # ● 定义实例变量
  40.   #--------------------------------------------------------------------------
  41.   attr_reader   :pic_str
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化对象
  44.   #     file_index : 存档文件索引 (0~3)
  45.   #     filename   : 文件名
  46.   #--------------------------------------------------------------------------
  47.   alias sbs_aam_picsavevx1_old_initialize initialize
  48.   def initialize(file_index, filename)
  49.     @pic_str = nil
  50.     sbs_aam_picsavevx1_old_initialize(file_index, filename)
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 读取部分游戏数据
  54.   #    开关以及变量为默认则是未使用 (为表示地名而扩展) 。
  55.   #--------------------------------------------------------------------------
  56.   alias sbs_aam_picsavevx1_old_load_gamedata load_gamedata
  57.   def load_gamedata
  58.     if FileTest.exist?(@filename)
  59.       file = File.open(@filename, "r")
  60.       begin
  61.         pic_str = Marshal.load(file)
  62.         @pic_str = pic_str
  63.       rescue
  64.         @pic_str = nil
  65.       ensure
  66.         file.close
  67.       end
  68.     end
  69.     sbs_aam_picsavevx1_old_load_gamedata
  70.   end
  71. end
  72. #==============================================================================
  73. # ■ Scene_File
  74. #------------------------------------------------------------------------------
  75. #  处理文件的类。
  76. #==============================================================================

  77. class Scene_File < Scene_Base
  78.   #--------------------------------------------------------------------------
  79.   # ● 生成存档文件窗口
  80.   #--------------------------------------------------------------------------
  81.   alias sbs_aam_picsavevx1_old_create_savefile_windows create_savefile_windows
  82.   def create_savefile_windows
  83.     @savefile_sprite = Sprite.new
  84.     @savefile_sprite.bitmap = Bitmap.new(1, 1)
  85.     sbs_aam_picsavevx1_old_create_savefile_windows
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 释放存档文件
  89.   #--------------------------------------------------------------------------
  90.   alias sbs_aam_picsavevx1_old_dispose_item_windows dispose_item_windows
  91.   def dispose_item_windows
  92.     @savefile_sprite.dispose
  93.     sbs_aam_picsavevx1_old_dispose_item_windows
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 更新存档文件窗口
  97.   #--------------------------------------------------------------------------
  98.   alias sbs_aam_picsavevx1_old_update_savefile_windows update_savefile_windows
  99.   def update_savefile_windows
  100.     @savefile_sprite.update
  101.     sbs_aam_picsavevx1_old_update_savefile_windows
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 更新存档文件选择
  105.   #--------------------------------------------------------------------------
  106.   alias sbs_aam_picsavevx1_old_update_savefile_selection update_savefile_selection
  107.   def update_savefile_selection
  108.     sbs_aam_picsavevx1_old_update_savefile_selection
  109.     if !@savefile_windows[@index].pic_str.nil?
  110.       str = @savefile_windows[@index].pic_str
  111.       @savefile_sprite.bitmap = Bitmap._load(str)
  112.       @help_window.back_opacity = 50
  113.       for window in @savefile_windows
  114.         window.back_opacity = 50
  115.       end
  116.     else
  117.       @savefile_sprite.bitmap = Bitmap.new(1, 1)
  118.       @help_window.back_opacity = 200
  119.       for window in @savefile_windows
  120.         window.back_opacity = 200
  121.       end
  122.     end
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 写入存档数据
  126.   #     file : 写入文件用对象 (已经打开)
  127.   #--------------------------------------------------------------------------
  128.   alias sbs_aam_picsavevx1_old_write_save_data write_save_data
  129.   def write_save_data(file)
  130.     pic_str = $game_temp.background_bitmap._dump
  131.     Marshal.dump(pic_str, file)
  132.     sbs_aam_picsavevx1_old_write_save_data(file)
  133.   end
  134. end
  135. #==============================================================================
  136. # ■ 最新截圖存檔 For RMVX By 釣到一隻猴子@_@ ── AAM@_@
  137. #==============================================================================
复制代码

作者: 越前リョーマ    时间: 2008-6-8 01:53
比沉默不器的难看多了……||||

不过那个不兼容鼠标……
作者: 公孙鸿剑    时间: 2008-6-8 19:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-6-10 05:03
以下引用公孙鸿剑于2008-6-8 11:40:24的发言:

楼主这个是不是直接在屏幕最底层透明显示截图?

就是....
我下载范例看了一下 {/tp}
作者: danny8376    时间: 2008-6-13 05:24
以下引用公孙鸿剑于2008-6-8 11:40:24的发言:

楼主这个是不是直接在屏幕最底层透明显示截图?



正是如此

不过还有个地方

那就是窗口的透明度有更改

如果觉得难看请自行优化吧

PS:本帖较偏技术方面

(迷:你根本是懒的改吧)

(我:别说那么大声啦{/xu})

先闪哩~~~~~~~~{/tp}
作者: 雪流星    时间: 2008-6-24 12:27
发布完毕
VIP + 3

http://rpg.blue/web/htm/news1109.htm




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