查看: 2349|回复: 3

[已经解决] 请问这个画面截图脚本现在还可以正常使用吗?

[复制链接]
梦石
0
星屑
1158
在线时间
62 小时
注册时间
2015-11-7
回帖
3
发表于 2022-2-2 16:19:32 | 显示全部楼层 |阅读模式
悬赏20星屑已解决
打开搁置了三年的游戏工程看了一下,发现里面むっくRu的截图脚本无法使用了……
我记得三年前的时候是可以在游戏任意时刻按下PRSC键保存画面截图到特定文件夹的,但现在不行了;
本以为是因为不久前换了电脑,结果打开老电脑试了一下发现也不行;
特地开了一个全新的工程单独测试这个脚本,也还是不能用

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

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

[pre lang="ruby"]# coding: utf-8
#===============================================================================
# ■ 遅延型スクリーンショット撮影さん for RGSS3
#-------------------------------------------------------------------------------
# 2012/06/10 Ru/むっくRu
#-------------------------------------------------------------------------------
#  PrintScreenを押すと指定フォルダに
#  ゲーム画面のスクリーンショットを保存する機能を追加します
#  (処理落ち対策として,押してから数秒後にファイルが生成されます)
#-------------------------------------------------------------------------------
# 【問題点など】
#  保存の際にゲームのフレームレートが少し落ちます(処理落ち)
#-------------------------------------------------------------------------------
# 【更新履歴】
# 2012/06/10 保存中にF12リセットを行うと強制終了する不具合を修正
# 2012/01/07 戦闘中にうまく撮影できないのを修正?
# 2011/12/27 ぶっぱ
#-------------------------------------------------------------------------------
# 【参考:PNG画像生成処理】
#  http://d.hatena.ne.jp/ku-ma-me/20091003/p1
#-------------------------------------------------------------------------------

#===============================================================================
# ● 設定項目
#===============================================================================
module HZM_VXA
  module ScreenShot
    # 保存するフォルダ名(末尾に/は付けない)
    DIRNAME = 'screenshot'
    # 保存するファイル名.拡張子(.png)は不要
    #  %Y …… 西暦
    #  %m …… 月(01-12)
    #  %d …… 日(01-31)
    #  %H …… 時(00-23)
    #  %M …… 分(00-59)
    #  %S …… 秒(00-59)
    FILENAME = "%Y%m%d_%H%M%S"
   
    # スクリーンショットに著作表示を入れる
    #   true  …… 入れる
    #   false …… 入れない
    USE_COPYRIGHT = false
    # 著作表示の文字
    COPYRIGHT_TEXT = '(C) 鳥小屋.txt'
    # 著作表示の色
    COPYRIGHT_COLOR = Color.new(255, 255, 255)
    # 著作表示の大きさ
    COPYRIGHT_SIZE  = 16
    # 著作表示の位置(0:左寄せ,1:中央寄せ,2:右寄せ)
    COPYRIGHT_ALIGN = 2
   
    # 1フレームに処理する回数
    # ※この値を増やすとファイルが生成されるまでの時間が短くなりますが,
    #   一度にかかる負荷量も増えるため,処理落ちが激しくなります
    RUN_SPEED = 3
  end
end

#===============================================================================
# ↑   ここまで設定   ↑
# ↓ 以下、スクリプト部 ↓
#===============================================================================

module HZM_VXA
  module ScreenShot
    VK_SNAPSHOT = 0x2c
    GetKeyState = Win32API.new('user32', 'GetKeyState', %w(l), 'i')
    #---------------------------------------------------------------------------
    # ● 初期化
    #---------------------------------------------------------------------------
    def self.init
      @pressed = false
      @list = []
    end
    #---------------------------------------------------------------------------
    # ● 更新
    #---------------------------------------------------------------------------
    def self.update
      add  if press?
      RUN_SPEED.times { develop }
    end
    #---------------------------------------------------------------------------
    # ● PrintScreen監視
    #---------------------------------------------------------------------------
    def self.press?
      if @pressed
        @pressed = (GetKeyState.call(VK_SNAPSHOT) < 0)
        false
      else
        @pressed = (GetKeyState.call(VK_SNAPSHOT) < 0)
      end
    end
    #---------------------------------------------------------------------------
    # ● 今の画面を現像待ちに追加
    #---------------------------------------------------------------------------
    def self.add
      bitmap = Graphics.snap_to_bitmap
      if USE_COPYRIGHT
        bitmap.font.size  = COPYRIGHT_SIZE
        bitmap.font.color = COPYRIGHT_COLOR
        bitmap.draw_text(0, bitmap.height - COPYRIGHT_SIZE, bitmap.width, COPYRIGHT_SIZE, COPYRIGHT_TEXT, COPYRIGHT_ALIGN)
      end
      filename = "#{Time.now.getlocal.strftime(FILENAME)}"
      @list.push({
        :bitmap => bitmap,
        :filename => filename
      })
    end
    #---------------------------------------------------------------------------
    # ● 現像処理
    #---------------------------------------------------------------------------
    def self.develop
      return if @list.empty?
      data = @list.first
      if data[:line] == nil  # 未処理
        data[:line] = 0
        data[:img] = []
      elsif data[:line] < data[:bitmap].height # 解析中
        data[:img].push 0
        for i in 0...data[:bitmap].width
          c = data[:bitmap].get_pixel(i, data[:line])
          data[:img].push(c.red, c.green, c.blue)
        end
        data[:line] += 1
      else  # 保存処理
        Dir.mkdir(DIRNAME) unless File.exist?(DIRNAME)
        cnt = Dir.glob("#{DIRNAME}/#{data[:filename]}*.png").size
        footer = cnt > 0 ? "_#{cnt}" : ""
        File.open("#{DIRNAME}/#{data[:filename]}#{footer}.png", 'wb') do |file|
          file.write "\x89PNG\r\n\x1a\n"
          file.write createChunk('IHDR', [data[:bitmap].width, data[:bitmap].height, 8, 2, 0, 0, 0].pack('N2C5'))
          file.write createChunk('IDAT', Zlib::Deflate.deflate(data[:img].pack('C*')))
          file.write createChunk('IEND', '')
        end
        data[:bitmap].dispose
        @list.shift
      end
    end
    #---------------------------------------------------------------------------
    # ● PNGチャンク作成
    #---------------------------------------------------------------------------
    def self.createChunk(type, data)
      [data.bytesize, type, data, Zlib.crc32(type + data)].pack('NA4A*N')
    end
  end
end

class Scene_Base
  #-----------------------------------------------------------------------------
  # ● フレーム更新(基本)(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_screenshot_update_basic update_basic
  def update_basic
    hzm_vxa_screenshot_update_basic
    HZM_VXA::ScreenShot.update
  end
end

class << SceneManager
  #-----------------------------------------------------------------------------
  # ● 実行(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_screenshot_run run
  def run
    HZM_VXA::ScreenShot.init
    hzm_vxa_screenshot_run
  end
end[/pre]

最佳答案

查看完整内容

原脚本的内容是不是霓修改过了呀?那都是很重要的内容,千万注意·一·个·字·都·不·能·改·唷!(雾) 嗯,经过我仔细斟酌,严格校订,终于把这个脚本的bug全部解决啦!~这次可不要再改来改去再弄坏了~♥~(大雾) 在游戏任意时段,按下【F7】,即可在根目录下一个温暖的文件夹里找到心爱的截图 [pre lang="ruby" line="1" file="nssiwi"]# coding: utf-8 #================================================ ...

评分

参与人数 1赞 +1 收起 理由
哇哇哇啊叭叭 + 1 楼竹,法烘宝~楼竹,法烘宝~楼竹,法烘宝~.

查看全部评分

梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

发表于 2022-2-2 16:19:33 | 显示全部楼层
本帖最后由 哇哇哇啊叭叭 于 2022-2-2 12:16 编辑

  

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

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

[pre lang="ruby" line="1" file="nssiwi"]# coding: utf-8
#===============================================================================
# ■ 遅延型スクリーンショット撮影さん for RGSS3
#-------------------------------------------------------------------------------
# 2012/06/10 Ru/むっくRu
#-------------------------------------------------------------------------------
#  PrintScreenを押すと指定フォルダに
#  ゲーム画面のスクリーンショットを保存する機能を追加します
#  (処理落ち対策として,押してから数秒後にファイルが生成されます)
#-------------------------------------------------------------------------------
# 【問題点など】
#  保存の際にゲームのフレームレートが少し落ちます(処理落ち)
#-------------------------------------------------------------------------------
# 【更新履歴】
# 2012/06/10 保存中にF12リセットを行うと強制終了する不具合を修正
# 2012/01/07 戦闘中にうまく撮影できないのを修正?
# 2011/12/27 ぶっぱ
#-------------------------------------------------------------------------------
# 【参考:PNG画像生成処理】
#  http://d.hatena.ne.jp/ku-ma-me/20091003/p1
#-------------------------------------------------------------------------------

#===============================================================================
# ● 設定項目
#===============================================================================
module HZM_VXA
  module ScreenShot
    # 保存するフォルダ名(末尾に/は付けない)
    DIRNAME = '春天来啦'
    # 保存するファイル名.拡張子(.png)は不要
    #  %Y …… 西暦
    #  %m …… 月(01-12)
    #  %d …… 日(01-31)
    #  %H …… 時(00-23)
    #  %M …… 分(00-59)
    #  %S …… 秒(00-59)
    FILENAME = "%Y%m%d_%H%M%S"

    # スクリーンショットに著作表示を入れる
    #   true  …… 入れる
    #   false …… 入れない
    USE_COPYRIGHT = true
    # 著作表示の文字
    COPYRIGHT_TEXT = '(C) 万物复苏,奈何孤独.rmvb'
    # 著作表示の色
    COPYRIGHT_COLOR = Color.new(255, 255, 255)
    # 著作表示の大きさ
    COPYRIGHT_SIZE  = 16
    # 著作表示の位置(0:左寄せ,1:中央寄せ,2:右寄せ)
    COPYRIGHT_ALIGN = 2

    # 1フレームに処理する回数
    # ※この値を増やすとファイルが生成されるまでの時間が短くなりますが,
    #   一度にかかる負荷量も増えるため,処理落ちが激しくなります
    RUN_SPEED = 66
  end
end

#===============================================================================
# ↑   ここまで設定   ↑
# ↓ 以下、スクリプト部 ↓
#===============================================================================

module HZM_VXA
  module ScreenShot
    #---------------------------------------------------------------------------
    # ● 初期化
    #---------------------------------------------------------------------------
    def self.init ; @list = [] ; end
    #---------------------------------------------------------------------------
    # ● 更新
    #---------------------------------------------------------------------------
    def self.update
      add if trigger?
      RUN_SPEED.times { develop }
    end
    #---------------------------------------------------------------------------
    # ● PrintScreen監視
    #---------------------------------------------------------------------------
    def self.trigger? ; Input.trigger?(:F7) ; end
    #---------------------------------------------------------------------------
    # ● 今の画面を現像待ちに追加
    #---------------------------------------------------------------------------
    def self.add
      puts "在截啦在截啦,别催啦!~#{Time.now.getlocal.strftime(FILENAME)}"
      bitmap = Graphics.snap_to_bitmap
      if USE_COPYRIGHT
        bitmap.font.size  = COPYRIGHT_SIZE
        bitmap.font.color = COPYRIGHT_COLOR
        bitmap.draw_text(0, bitmap.height - COPYRIGHT_SIZE, bitmap.width, COPYRIGHT_SIZE, COPYRIGHT_TEXT, COPYRIGHT_ALIGN)
      end
      filename = "狗熊撒欢儿#{Time.now.getlocal.strftime(FILENAME)}"
      @list.push({
        :bitmap => bitmap,
        :filename => filename
      })
    end
    #---------------------------------------------------------------------------
    # ● 現像処理
    #---------------------------------------------------------------------------
    def self.develop
      return if @list.empty?
      data = @list.first
      if data[:line] == nil  # 未処理
        data[:line] = 0
        data[:img] = []
      elsif data[:line] < data[:bitmap].height # 解析中
        data[:img].push 0
        for i in 0...data[:bitmap].width
          c = data[:bitmap].get_pixel(i, data[:line])
          data[:img].push(c.red, c.green, c.blue)
        end
        data[:line] += 1
      else  # 保存処理
        Dir.mkdir(DIRNAME) unless File.exist?(DIRNAME)
        cnt = Dir.glob("#{DIRNAME}/#{data[:filename]}*.png").size
        footer = cnt > 0 ? "_#{cnt}" : ""
        File.open("#{DIRNAME}/#{data[:filename]}#{footer}.png", 'wb') do |file|
          file.write "\x89PNG\r\n\x1a\n"
          file.write createChunk('IHDR', [data[:bitmap].width, data[:bitmap].height, 8, 2, 0, 0, 0].pack('N2C5'))
          file.write createChunk('IDAT', Zlib::Deflate.deflate(data[:img].pack('C*')))
          file.write createChunk('IEND', '')
        end
        data[:bitmap].dispose
        @list.shift
      end
    end
    #---------------------------------------------------------------------------
    # ● PNGチャンク作成
    #---------------------------------------------------------------------------
    def self.createChunk(type, data)
      msgbox "终于截完了"
      [data.bytesize, type, data, Zlib.crc32(type + data)].pack('NA4A*N')
    end
  end
end

class Scene_Base
  #-----------------------------------------------------------------------------
  # ● フレーム更新(基本)(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_screenshot_update_basic update_basic
  def update_basic
    hzm_vxa_screenshot_update_basic
    HZM_VXA::ScreenShot.update
  end
end

class << SceneManager
  #-----------------------------------------------------------------------------
  # ● 実行(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_screenshot_run run
  def run
    HZM_VXA::ScreenShot.init
    hzm_vxa_screenshot_run
  end
end
[/pre]



评分

参与人数 2星屑 +50 赞 +1 收起 理由
alexncf125 + 50 认可答案
宜清Willing + 1 其实已经去作者网站上扒了最新版还是不行(.

查看全部评分

风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

梦石
0
星屑
1158
在线时间
62 小时
注册时间
2015-11-7
回帖
3
 楼主| 发表于 2022-2-2 17:49:34 | 显示全部楼层
哇哇哇啊叭叭 发表于 2022-2-2 16:19
原脚本的内容是不是霓修改过了呀?那都是很重要的内容,千万注意·一·个·字·都·不·能·改·唷! ...

评分字数超限了(捂脸)已经可以使用了!辛苦啦!非常感谢!
回复

使用道具 举报

梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

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


  

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

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


  

评分

参与人数 2星屑 +15 赞 +1 收起 理由
alexncf125 + 15 塞糖
宜清Willing + 1 原来如此!明白了!感谢说明&amp;gt;&amp;lt;~.

查看全部评分

风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部