Project1

标题: 请问这个画面截图脚本现在还可以正常使用吗? [打印本页]

作者: 宜清Willing    时间: 2022-2-2 16:19
标题: 请问这个画面截图脚本现在还可以正常使用吗?
打开搁置了三年的游戏工程看了一下,发现里面むっくRu的截图脚本无法使用了……
我记得三年前的时候是可以在游戏任意时刻按下PRSC键保存画面截图到特定文件夹的,但现在不行了;
本以为是因为不久前换了电脑,结果打开老电脑试了一下发现也不行;
特地开了一个全新的工程单独测试这个脚本,也还是不能用

明明没有进行过任何改动,脚本突然就失效了,真的很费解其中的原因,难道还能是因为win10更新导致的吗(?)

原脚本如下,想知道如果这个脚本还能正常使用的话我应该怎么办,提前感谢!
PS.我尝试过把PRSC改成其他键(改了66行的VK键值),比如F5和P键之类的,依然无法使用(不是很懂脚本,不知道这样做是否可行,但系统没有报错)

RUBY 代码复制
  1. # coding: utf-8
  2. #===============================================================================
  3. # ■ 遅延型スクリーンショット撮影さん for RGSS3
  4. #-------------------------------------------------------------------------------
  5. # 2012/06/10 Ru/むっくRu
  6. #-------------------------------------------------------------------------------
  7. #  PrintScreenを押すと指定フォルダに
  8. #  ゲーム画面のスクリーンショットを保存する機能を追加します
  9. #  (処理落ち対策として,押してから数秒後にファイルが生成されます)
  10. #-------------------------------------------------------------------------------
  11. # 【問題点など】
  12. #  保存の際にゲームのフレームレートが少し落ちます(処理落ち)
  13. #-------------------------------------------------------------------------------
  14. # 【更新履歴】
  15. # 2012/06/10 保存中にF12リセットを行うと強制終了する不具合を修正
  16. # 2012/01/07 戦闘中にうまく撮影できないのを修正?
  17. # 2011/12/27 ぶっぱ
  18. #-------------------------------------------------------------------------------
  19. # 【参考:PNG画像生成処理】
  20. #  [url]http://d.hatena.ne.jp/ku-ma-me/20091003/p1[/url]
  21. #-------------------------------------------------------------------------------
  22.  
  23. #===============================================================================
  24. # ● 設定項目
  25. #===============================================================================
  26. module HZM_VXA
  27.   module ScreenShot
  28.     # 保存するフォルダ名(末尾に/は付けない)
  29.     DIRNAME = 'screenshot'
  30.     # 保存するファイル名.拡張子(.png)は不要
  31.     #  %Y …… 西暦
  32.     #  %m …… 月(01-12)
  33.     #  %d …… 日(01-31)
  34.     #  %H …… 時(00-23)
  35.     #  %M …… 分(00-59)
  36.     #  %S …… 秒(00-59)
  37.     FILENAME = "%Y%m%d_%H%M%S"
  38.  
  39.     # スクリーンショットに著作表示を入れる
  40.     #   true  …… 入れる
  41.     #   false …… 入れない
  42.     USE_COPYRIGHT = false
  43.     # 著作表示の文字
  44.     COPYRIGHT_TEXT = '(C) 鳥小屋.txt'
  45.     # 著作表示の色
  46.     COPYRIGHT_COLOR = Color.new(255, 255, 255)
  47.     # 著作表示の大きさ
  48.     COPYRIGHT_SIZE  = 16
  49.     # 著作表示の位置(0:左寄せ,1:中央寄せ,2:右寄せ)
  50.     COPYRIGHT_ALIGN = 2
  51.  
  52.     # 1フレームに処理する回数
  53.     # ※この値を増やすとファイルが生成されるまでの時間が短くなりますが,
  54.     #   一度にかかる負荷量も増えるため,処理落ちが激しくなります
  55.     RUN_SPEED = 3
  56.   end
  57. end
  58.  
  59. #===============================================================================
  60. # ↑   ここまで設定   ↑
  61. # ↓ 以下、スクリプト部 ↓
  62. #===============================================================================
  63.  
  64. module HZM_VXA
  65.   module ScreenShot
  66.     VK_SNAPSHOT = 0x2c
  67.     GetKeyState = Win32API.new('user32', 'GetKeyState', %w(l), 'i')
  68.     #---------------------------------------------------------------------------
  69.     # ● 初期化
  70.     #---------------------------------------------------------------------------
  71.     def self.init
  72.       @pressed = false
  73.       @list = []
  74.     end
  75.     #---------------------------------------------------------------------------
  76.     # ● 更新
  77.     #---------------------------------------------------------------------------
  78.     def self.update
  79.       add  if press?
  80.       RUN_SPEED.times { develop }
  81.     end
  82.     #---------------------------------------------------------------------------
  83.     # ● PrintScreen監視
  84.     #---------------------------------------------------------------------------
  85.     def self.press?
  86.       if @pressed
  87.         @pressed = (GetKeyState.call(VK_SNAPSHOT) < 0)
  88.         false
  89.       else
  90.         @pressed = (GetKeyState.call(VK_SNAPSHOT) < 0)
  91.       end
  92.     end
  93.     #---------------------------------------------------------------------------
  94.     # ● 今の画面を現像待ちに追加
  95.     #---------------------------------------------------------------------------
  96.     def self.add
  97.       bitmap = Graphics.snap_to_bitmap
  98.       if USE_COPYRIGHT
  99.         bitmap.font.size  = COPYRIGHT_SIZE
  100.         bitmap.font.color = COPYRIGHT_COLOR
  101.         bitmap.draw_text(0, bitmap.height - COPYRIGHT_SIZE, bitmap.width, COPYRIGHT_SIZE, COPYRIGHT_TEXT, COPYRIGHT_ALIGN)
  102.       end
  103.       filename = "#{Time.now.getlocal.strftime(FILENAME)}"
  104.       @list.push({
  105.         :bitmap => bitmap,
  106.         :filename => filename
  107.       })
  108.     end
  109.     #---------------------------------------------------------------------------
  110.     # ● 現像処理
  111.     #---------------------------------------------------------------------------
  112.     def self.develop
  113.       return if @list.empty?
  114.       data = @list.first
  115.       if data[:line] == nil  # 未処理
  116.         data[:line] = 0
  117.         data[:img] = []
  118.       elsif data[:line] < data[:bitmap].height # 解析中
  119.         data[:img].push 0
  120.         for i in 0...data[:bitmap].width
  121.           c = data[:bitmap].get_pixel(i, data[:line])
  122.           data[:img].push(c.red, c.green, c.blue)
  123.         end
  124.         data[:line] += 1
  125.       else  # 保存処理
  126.         Dir.mkdir(DIRNAME) unless File.exist?(DIRNAME)
  127.         cnt = Dir.glob("#{DIRNAME}/#{data[:filename]}*.png").size
  128.         footer = cnt > 0 ? "_#{cnt}" : ""
  129.         File.open("#{DIRNAME}/#{data[:filename]}#{footer}.png", 'wb') do |file|
  130.           file.write "\x89PNG\r\n\x1a\n"
  131.           file.write createChunk('IHDR', [data[:bitmap].width, data[:bitmap].height, 8, 2, 0, 0, 0].pack('N2C5'))
  132.           file.write createChunk('IDAT', Zlib::Deflate.deflate(data[:img].pack('C*')))
  133.           file.write createChunk('IEND', '')
  134.         end
  135.         data[:bitmap].dispose
  136.         @list.shift
  137.       end
  138.     end
  139.     #---------------------------------------------------------------------------
  140.     # ● PNGチャンク作成
  141.     #---------------------------------------------------------------------------
  142.     def self.createChunk(type, data)
  143.       [data.bytesize, type, data, Zlib.crc32(type + data)].pack('NA4A*N')
  144.     end
  145.   end
  146. end
  147.  
  148. class Scene_Base
  149.   #-----------------------------------------------------------------------------
  150.   # ● フレーム更新(基本)(エイリアス)
  151.   #-----------------------------------------------------------------------------
  152.   alias hzm_vxa_screenshot_update_basic update_basic
  153.   def update_basic
  154.     hzm_vxa_screenshot_update_basic
  155.     HZM_VXA::ScreenShot.update
  156.   end
  157. end
  158.  
  159. class << SceneManager
  160.   #-----------------------------------------------------------------------------
  161.   # ● 実行(エイリアス)
  162.   #-----------------------------------------------------------------------------
  163.   alias hzm_vxa_screenshot_run run
  164.   def run
  165.     HZM_VXA::ScreenShot.init
  166.     hzm_vxa_screenshot_run
  167.   end
  168. end

作者: 哇哇哇啊叭叭    时间: 2022-2-2 16:19
本帖最后由 哇哇哇啊叭叭 于 2022-2-2 12:16 编辑

  

  原脚本的内容是不是霓修改过了呀?那都是很重要的内容,千万注意·一·个·字·都·不·能·改·唷!(雾)
  嗯,经过我仔细斟酌,严格校订,终于把这个脚本的bug全部解决啦!~这次可不要再改来改去再弄坏了~♥~(大雾)

  在游戏任意时段,按下【F7】,即可在根目录下一个温暖的文件夹里找到心爱的截图
  

RUBY 代码复制下载
  1. # coding: utf-8
  2. #===============================================================================
  3. # ■ 遅延型スクリーンショット撮影さん for RGSS3
  4. #-------------------------------------------------------------------------------
  5. # 2012/06/10 Ru/むっくRu
  6. #-------------------------------------------------------------------------------
  7. #  PrintScreenを押すと指定フォルダに
  8. #  ゲーム画面のスクリーンショットを保存する機能を追加します
  9. #  (処理落ち対策として,押してから数秒後にファイルが生成されます)
  10. #-------------------------------------------------------------------------------
  11. # 【問題点など】
  12. #  保存の際にゲームのフレームレートが少し落ちます(処理落ち)
  13. #-------------------------------------------------------------------------------
  14. # 【更新履歴】
  15. # 2012/06/10 保存中にF12リセットを行うと強制終了する不具合を修正
  16. # 2012/01/07 戦闘中にうまく撮影できないのを修正?
  17. # 2011/12/27 ぶっぱ
  18. #-------------------------------------------------------------------------------
  19. # 【参考:PNG画像生成処理】
  20. #  [url]http://d.hatena.ne.jp/ku-ma-me/20091003/p1[/url]
  21. #-------------------------------------------------------------------------------
  22.  
  23. #===============================================================================
  24. # ● 設定項目
  25. #===============================================================================
  26. module HZM_VXA
  27.   module ScreenShot
  28.     # 保存するフォルダ名(末尾に/は付けない)
  29.     DIRNAME = '春天来啦'
  30.     # 保存するファイル名.拡張子(.png)は不要
  31.     #  %Y …… 西暦
  32.     #  %m …… 月(01-12)
  33.     #  %d …… 日(01-31)
  34.     #  %H …… 時(00-23)
  35.     #  %M …… 分(00-59)
  36.     #  %S …… 秒(00-59)
  37.     FILENAME = "%Y%m%d_%H%M%S"
  38.  
  39.     # スクリーンショットに著作表示を入れる
  40.     #   true  …… 入れる
  41.     #   false …… 入れない
  42.     USE_COPYRIGHT = true
  43.     # 著作表示の文字
  44.     COPYRIGHT_TEXT = '(C) 万物复苏,奈何孤独.rmvb'
  45.     # 著作表示の色
  46.     COPYRIGHT_COLOR = Color.new(255, 255, 255)
  47.     # 著作表示の大きさ
  48.     COPYRIGHT_SIZE  = 16
  49.     # 著作表示の位置(0:左寄せ,1:中央寄せ,2:右寄せ)
  50.     COPYRIGHT_ALIGN = 2
  51.  
  52.     # 1フレームに処理する回数
  53.     # ※この値を増やすとファイルが生成されるまでの時間が短くなりますが,
  54.     #   一度にかかる負荷量も増えるため,処理落ちが激しくなります
  55.     RUN_SPEED = 66
  56.   end
  57. end
  58.  
  59. #===============================================================================
  60. # ↑   ここまで設定   ↑
  61. # ↓ 以下、スクリプト部 ↓
  62. #===============================================================================
  63.  
  64. module HZM_VXA
  65.   module ScreenShot
  66.     #---------------------------------------------------------------------------
  67.     # ● 初期化
  68.     #---------------------------------------------------------------------------
  69.     def self.init ; @list = [] ; end
  70.     #---------------------------------------------------------------------------
  71.     # ● 更新
  72.     #---------------------------------------------------------------------------
  73.     def self.update
  74.       add if trigger?
  75.       RUN_SPEED.times { develop }
  76.     end
  77.     #---------------------------------------------------------------------------
  78.     # ● PrintScreen監視
  79.     #---------------------------------------------------------------------------
  80.     def self.trigger? ; Input.trigger?(:F7) ; end
  81.     #---------------------------------------------------------------------------
  82.     # ● 今の画面を現像待ちに追加
  83.     #---------------------------------------------------------------------------
  84.     def self.add
  85.       puts "在截啦在截啦,别催啦!~#{Time.now.getlocal.strftime(FILENAME)}"
  86.       bitmap = Graphics.snap_to_bitmap
  87.       if USE_COPYRIGHT
  88.         bitmap.font.size  = COPYRIGHT_SIZE
  89.         bitmap.font.color = COPYRIGHT_COLOR
  90.         bitmap.draw_text(0, bitmap.height - COPYRIGHT_SIZE, bitmap.width, COPYRIGHT_SIZE, COPYRIGHT_TEXT, COPYRIGHT_ALIGN)
  91.       end
  92.       filename = "狗熊撒欢儿#{Time.now.getlocal.strftime(FILENAME)}"
  93.       @list.push({
  94.         :bitmap => bitmap,
  95.         :filename => filename
  96.       })
  97.     end
  98.     #---------------------------------------------------------------------------
  99.     # ● 現像処理
  100.     #---------------------------------------------------------------------------
  101.     def self.develop
  102.       return if @list.empty?
  103.       data = @list.first
  104.       if data[:line] == nil  # 未処理
  105.         data[:line] = 0
  106.         data[:img] = []
  107.       elsif data[:line] < data[:bitmap].height # 解析中
  108.         data[:img].push 0
  109.         for i in 0...data[:bitmap].width
  110.           c = data[:bitmap].get_pixel(i, data[:line])
  111.           data[:img].push(c.red, c.green, c.blue)
  112.         end
  113.         data[:line] += 1
  114.       else  # 保存処理
  115.         Dir.mkdir(DIRNAME) unless File.exist?(DIRNAME)
  116.         cnt = Dir.glob("#{DIRNAME}/#{data[:filename]}*.png").size
  117.         footer = cnt > 0 ? "_#{cnt}" : ""
  118.         File.open("#{DIRNAME}/#{data[:filename]}#{footer}.png", 'wb') do |file|
  119.           file.write "\x89PNG\r\n\x1a\n"
  120.           file.write createChunk('IHDR', [data[:bitmap].width, data[:bitmap].height, 8, 2, 0, 0, 0].pack('N2C5'))
  121.           file.write createChunk('IDAT', Zlib::Deflate.deflate(data[:img].pack('C*')))
  122.           file.write createChunk('IEND', '')
  123.         end
  124.         data[:bitmap].dispose
  125.         @list.shift
  126.       end
  127.     end
  128.     #---------------------------------------------------------------------------
  129.     # ● PNGチャンク作成
  130.     #---------------------------------------------------------------------------
  131.     def self.createChunk(type, data)
  132.       msgbox "终于截完了"
  133.       [data.bytesize, type, data, Zlib.crc32(type + data)].pack('NA4A*N')
  134.     end
  135.   end
  136. end
  137.  
  138. class Scene_Base
  139.   #-----------------------------------------------------------------------------
  140.   # ● フレーム更新(基本)(エイリアス)
  141.   #-----------------------------------------------------------------------------
  142.   alias hzm_vxa_screenshot_update_basic update_basic
  143.   def update_basic
  144.     hzm_vxa_screenshot_update_basic
  145.     HZM_VXA::ScreenShot.update
  146.   end
  147. end
  148.  
  149. class << SceneManager
  150.   #-----------------------------------------------------------------------------
  151.   # ● 実行(エイリアス)
  152.   #-----------------------------------------------------------------------------
  153.   alias hzm_vxa_screenshot_run run
  154.   def run
  155.     HZM_VXA::ScreenShot.init
  156.     hzm_vxa_screenshot_run
  157.   end
  158. end





作者: 宜清Willing    时间: 2022-2-2 17:49
哇哇哇啊叭叭 发表于 2022-2-2 16:19
原脚本的内容是不是霓修改过了呀?那都是很重要的内容,千万注意·一·个·字·都·不·能·改·唷! ...

评分字数超限了(捂脸)已经可以使用了!辛苦啦!非常感谢!
作者: 哇哇哇啊叭叭    时间: 2022-2-2 17:50
本帖最后由 哇哇哇啊叭叭 于 2022-2-2 12:52 编辑
宜清Willing 发表于 2022-2-2 12:49
评分字数超限了(捂脸)已经可以使用了!辛苦啦!非常感谢!


  

  客气啦!~
  额,那个,把【USE_COPYRIGHT = true】这个改成【USE_COPYRIGHT = false】吧,这样就可以没有水印啦

  起始应该主要是【RUN_SPEED = 66】这个的问题,数值太小,系统就难以监测到按键输入,改大了会浪费资源。其次,可能是由于原文自带的按键监测部分不太合适,改成RM自带的检测按键会好很多。


  




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