Project1

标题: 能不能利用游戏里的截图来制作STAFF? [打印本页]

作者: 精灵使者    时间: 2014-12-31 14:27
标题: 能不能利用游戏里的截图来制作STAFF?
本帖最后由 精灵使者 于 2014-12-31 14:28 编辑

也就是利用你在游戏里的精彩一瞬间来制作最后游戏团队字幕的背景,例如和三国志赤壁之战那样。
结局的所有图片都来源于你战胜BOSS的所有截图集合。
现在唯一的一件事是:
你不知道截图的内容,如何调用截图来做最后的STAFF?
另:这里的截图不是用截图工具放进去的,而是系统根据游戏进程自动截图
请高手指教。
作者: 喵呜喵5    时间: 2014-12-31 17:23
  1. # 保存屏幕截图

  2. module M5SS20141231
  3.   def self.shot
  4.     $snap_shot.dispose if $snap_shot
  5.     $snap_shot = Graphics.snap_to_bitmap
  6.   end
  7. end

  8. # 快速储存Bitmap的Marshal By 柳之一

  9. class Font
  10.   def marshal_dump
  11.   end
  12.   def marshal_load(obj)
  13.   end
  14. end
  15. class Bitmap
  16.   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  17.   RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  18.   def _dump(limit)
  19.     data = "rgba" * width * height
  20.     RtlMoveMemory_pi.call(data, address, data.length)
  21.     [width, height, Zlib::Deflate.deflate(data)].pack("LLa*")
  22.   end
  23.   def self._load(str)
  24.     w, h, zdata = str.unpack("LLa*")
  25.     b = self.new(w, h)
  26.     RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4)
  27.     return b
  28.   end
  29.   def address
  30.     buffer, ad = "rgba", object_id * 2 + 16
  31.     RtlMoveMemory_pi.call(buffer, ad, 4)
  32.     ad = buffer.unpack("L")[0] + 8
  33.     RtlMoveMemory_pi.call(buffer, ad, 4)
  34.     ad = buffer.unpack("L")[0] + 16
  35.     RtlMoveMemory_pi.call(buffer, ad, 4)
  36.     return buffer.unpack("L")[0]
  37.   end
  38. end

  39. # 截图保存到存档中

  40. class << DataManager
  41.   alias m5_20121231_load_normal_database load_normal_database
  42.   def load_normal_database
  43.     m5_20121231_load_normal_database
  44.     $snap_shot = nil
  45.   end
  46.   alias m5_20141231_make_save_contents make_save_contents
  47.   def make_save_contents
  48.     contents = m5_20141231_make_save_contents   
  49.     contents[:snapshot] = $snap_shot   
  50.     contents
  51.   end
  52.   alias m5_20141231_extract_save_contents extract_save_contents
  53.   def extract_save_contents(contents)
  54.     m5_20141231_extract_save_contents(contents)
  55.     $snap_shot = contents[:snapshot]
  56.   end
  57. end

  58. # 测试脚本效果的界面

  59. class Scene_Snap_Test < Scene_Base  
  60.   def start
  61.     super
  62.     @sprite = Sprite.new
  63.     bitmap = $snap_shot || Bitmap.new(1,1)
  64.     @sprite.bitmap = bitmap.clone
  65.     @sprite.x -= 10
  66.   end
  67.   def update
  68.     super
  69.     return_scene if Input.trigger?(:B)
  70.   end
  71.   def terminate
  72.     super
  73.     @sprite.dispose
  74.   end
  75. end

  76. # F5截图,F6打开测试界面

  77. class << Graphics
  78.   alias m5_20141231_update update
  79.   def update
  80.     m5_20141231_update
  81.     if Input.press?(:F5)
  82.       M5SS20141231.shot
  83.     elsif Input.trigger?(:F6)
  84.       return if SceneManager.scene.is_a? Scene_Snap_Test
  85.       SceneManager.call(Scene_Snap_Test)
  86.     end
  87.   end  
  88. end
复制代码
RMVA用
作者: 精灵使者    时间: 2014-12-31 23:57
本帖最后由 精灵使者 于 2015-1-1 12:04 编辑

如果调用同一个文件名的图片,里面的内容会刷新么?
精灵的想法是这样的:
建立一系列空白图片来做STAFF,然后每关的需要的截图就截在这些空白图片里……
但是不知道STAFF能及时更新成截图否。




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