查看: 2314|回复: 3

[已经解决] 求VX截取全张地图为图片的脚本

[复制链接]
梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2017-6-16 21:14:21 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
求VX截取全张地图为图片的脚本
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-6-17 00:02:27 | 显示全部楼层
本帖最后由 guoxiaomi 于 2017-6-17 00:08 编辑

https://littledrago.blogspot.com/2013/08/rgss-map-screenshot.html

http://pastebin.com/raw/S1Ln4hJc

http://pastebin.com/raw/Fh9wxYC9

[pre lang="ruby"]#==============================================================================
# Map Screenshot
# Version : 1.06
# Author : LiTTleDRAgo
#==============================================================================
#
#  How to Use :
#     
#     Press F6 to take map screenshot
#     Press F7 to take snapshot
#
#==============================================================================

($imported ||= {})[:drg_map_screenshot_xp] = 1.06

text = "This Script needs Drago - Core Engine v1.35 or later"
($imported[:drg_core_engine] || 0) >= 1.35 || raise(text)
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#  This class brings together map screen sprites, tilemaps, etc.
#  It's used within the Scene_Map class.
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Constant
  #--------------------------------------------------------------------------
  INPUT_MAP_SCREENSHOT = Input::F6   # Change to nil to disable
  INPUT_SCREENSHOT     = Input::F7   # Change to nil to disable
  SCREENSHOT_FOLDER    = "Screenshot"
  #--------------------------------------------------------------------------
  # * Alias Method
  #--------------------------------------------------------------------------
  alias_sec_method :map_screenshot, :update
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update(*args)
    map_screenshot(*args)
    return if @take_screenshot
    snap_map_screenshot if INPUT_MAP_SCREENSHOT && Input.trigger?(INPUT_MAP_SCREENSHOT)
    snap_screenshot     if INPUT_SCREENSHOT && Input.trigger?(INPUT_SCREENSHOT)
  end
  #--------------------------------------------------------------------------
  # * snap_map_screenshot
  #--------------------------------------------------------------------------
  def snap_map_screenshot
    old_time = Time.now
    bitmap = collect_snap_map_bitmap
    name = sprintf("Screenshot - Map%03d", $game_map.map_id)
    export_screenshot(bitmap,"#{name}")
    bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # * snap_screenshot
  #--------------------------------------------------------------------------
  def snap_screenshot
    bitmap = Graphics.snap_to_bitmap
    Dir.make_dir(SCREENSHOT_FOLDER) if FileTest.not.directory?(SCREENSHOT_FOLDER)
    dir = Dir.new(SCREENSHOT_FOLDER)
    count = dir.entries.select {|s| s.to_s =~ /Screenshot/ }
    name = sprintf("Screenshot - %03d", count.size + 1)
    count.reverse.each_with_index do |s,i|
      temp = sprintf("Screenshot - %03d", i + 1)
      name = temp if File.not.exist?("#{SCREENSHOT_FOLDER}/#{temp}.png")
    end
    export_screenshot(bitmap,"#{name}")
    bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # * export_screenshot
  #--------------------------------------------------------------------------
  def export_screenshot(bitmap,name='snapshot')
    exp_time = (bitmap.height * bitmap.width) * 0.00000664
    string = "Taking screenshot please wait.... \n" +
             "Number of pixels: #{bitmap.height * bitmap.width} \n"+
             "Estimated time: #{exp_time} seconds."
    report_screenshot("#{string.to_s}")
    old_time = Time.now
    Dir.make_dir(SCREENSHOT_FOLDER) if FileTest.not.directory?(SCREENSHOT_FOLDER)
    bitmap.export("#{SCREENSHOT_FOLDER}/#{name}.png")
    if File.exist?("#{SCREENSHOT_FOLDER}/#{name}.png")
      string = "#{name}.png was created. \n" +
                "File size: width #{bitmap.width}, height #{bitmap.height}. \n" +
                "Time taken: #{Time.now - old_time} seconds."
    else
      string = "Failed to create #{name}.png.\n" +
              "Time taken: #{Time.now - old_time} seconds."         
    end         
    report_screenshot("#{string.to_s}")
  end
  #--------------------------------------------------------------------------
  # * report_screenshot
  #--------------------------------------------------------------------------
  def report_screenshot(*args)
    defined?(Window_BattleActor) ? msgbox(*args) : print(*args)
  end
  #--------------------------------------------------------------------------
  # * collect_snap_map_bitmap
  #--------------------------------------------------------------------------
  def collect_snap_map_bitmap
    bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32)
    _w = (($game_map.width / 4) % Graphics.width).floor + 1
    _h = (($game_map.height / 4) % Graphics.height).floor + 1
    _x = (0.._w).to_a.collect {|s| s * Graphics.width}
    _y = (0.._h).to_a.collect {|s| s * Graphics.height}
    _dx = $game_map.display_x
    _dy = $game_map.display_y
    _x.each do |x|
      _y.each do |y|
        $game_map.instance_variable_set(:@display_x, x/tilemap_move_multiplier)
        $game_map.instance_variable_set(:@display_y, y/tilemap_move_multiplier)
        @take_screenshot = true
        update
        Graphics.update unless defined?(Window_ActorCommand)
        snap = Graphics.snap_to_bitmap
        bitmap.blt(x,y,snap,snap.rect)
        snap.dispose
      end
    end
    $game_map.instance_variable_set(:@display_x, _dx)
    $game_map.instance_variable_set(:@display_y, _dy)
    update
    @take_screenshot = false
    bitmap
  end
  #--------------------------------------------------------------------------
  # * tilemap_move_multiplier
  #--------------------------------------------------------------------------
  def tilemap_move_multiplier
    n = 1.00 / 4
    n = 1.00 / 8  if defined?(Window_ActorCommand)
    n = 1.00 * 32 if defined?(Window_BattleActor)
    return n
  end  
end[/pre]

评分

参与人数 1星屑 +40 收起 理由
怪蜀黍 + 40 认可答案

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
 楼主| 发表于 2017-6-17 08:37:08 | 显示全部楼层
回复

使用道具 举报

梦石
0
星屑
60
在线时间
23 小时
注册时间
2016-1-3
回帖
1
发表于 2017-7-25 19:55:13 | 显示全部楼层

请问这个是怎么用的,为什么 Map Screenshot 我放在vx里,启动会报错
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部