Project1

标题: Parallax--地图区域截图保存(va) [打印本页]

作者: 吾不知    时间: 2012-8-25 12:27
标题: Parallax--地图区域截图保存(va)
本帖最后由 吾不知 于 2012-8-25 12:29 编辑

这是一个好用的脚本,可以帮助我们节省大量的时间。
概要:地图区域自动截图保存,在制作视差映射时节省大量拼接图片的时间,将整张地图截图并保存下来。
使用方法:进入游戏前将主角透明,不必要的事件隐藏(避免截图后干扰),测试时按F7键即可自动截图并保存在主文件目录下,保存的文件名可以在倒数第九行更改,
如'ground%03d-1.png' ='ground地图id-1.png' 可以直接在一些视差脚本中使用。

来源:
#    バージョン :  1.0.0
#    対      応 :  RPGツクールVX Ace : RGSS3
#    制  作  者 :  CACAO
#    配  布  元 :  http://cacaosoft.web.fc2.com/


脚本如下
RUBY 代码复制
  1. #******************************************************************************
  2. #
  3. #    * PNG 保存
  4. #
  5. #  --------------------------------------------------------------------------
  6. #    バージョン :  1.0.0
  7. #    対      応 :  RPGツクールVX Ace : RGSS3
  8. #    制  作  者 :  CACAO
  9. #    配  布  元 :  [url]http://cacaosoft.web.fc2.com/[/url]
  10. #  --------------------------------------------------------------------------
  11. #   == 概    要 ==
  12. #
  13. #    : ピングファイルの出力機能を追加します。
  14. #
  15. #  --------------------------------------------------------------------------
  16. #   == 使用方法 ==
  17. #
  18. #    ★ Bitmap#save_png(filename, alpha = false)
  19. #     このビットマップをピングファイルで出力
  20. #     filename : 保存するファイル名
  21. #     alpha    : αチャンネルの有無
  22. #
  23. #
  24. #******************************************************************************
  25.  
  26.  
  27. #/////////////////////////////////////////////////////////////////////////////#
  28. #                                                                             #
  29. #                  このスクリプトに設定項目はありません。                     #
  30. #                                                                             #
  31. #/////////////////////////////////////////////////////////////////////////////#
  32.  
  33.  
  34. class Bitmap
  35.   #--------------------------------------------------------------------------
  36.   # ● ピング画像として保存
  37.   #     filename : ファイル名
  38.   #     alpha    : アルファチャンネルの有無
  39.   #--------------------------------------------------------------------------
  40.   def save_png(filename, alpha = false)
  41.     sgnt = "\x89PNG\r\n\x1a\n"
  42.     ihdr = _chunk('IHDR', [width,height,8,(alpha ? 6 : 2),0,0,0].pack('N2C5'))
  43.     data = []
  44.     height.times do |y|
  45.       data << 0
  46.       width.times do |x|
  47.         color = self.get_pixel(x, y)
  48.         data << color.red << color.green << color.blue
  49.         data << color.alpha if alpha
  50.       end
  51.     end
  52.     idat = _chunk('IDAT', Zlib::Deflate.deflate(data.pack('C*')))
  53.     iend = _chunk('IEND', "")
  54.     File.open(filename, 'wb') do |file|
  55.       file.write(sgnt)
  56.       file.write(ihdr)
  57.       file.write(idat)
  58.       file.write(iend)
  59.     end
  60.   end
  61. private
  62.   #--------------------------------------------------------------------------
  63.   # ● チャンクの作成
  64.   #     name : チャンク名
  65.   #     data : チャンクデータ
  66.   #--------------------------------------------------------------------------
  67.   def _chunk(name, data)
  68.     return [data.size, name, data, Zlib.crc32(name + data)].pack('NA4A*N')
  69.   end
  70. end
  71.  
  72.  
  73. #******************************************************************************
  74. #
  75. #    * マップ画像の保存
  76. #
  77. #  --------------------------------------------------------------------------
  78. #    バージョン :  1.0.0
  79. #    対      応 :  RPGツクールVX Ace : RGSS3
  80. #    制  作  者 :  CACAO
  81. #    配  布  元 :  [url]http://cacaosoft.web.fc2.com/[/url]
  82. #  --------------------------------------------------------------------------
  83. #   == 概    要 ==
  84. #
  85. #    : マップを1枚の画像にして保存します。
  86. #
  87. #  --------------------------------------------------------------------------
  88. #   == 注意事項 ==
  89. #
  90. #    ※ 画像保存に『PNG 保存』スクリプトが必要になります。
  91. #    ※ ゲーム配布時には、削除してください。
  92. #    ※ 撮影時にプレイヤーは非表示になります。
  93. #
  94. #  --------------------------------------------------------------------------
  95. #   == 使用方法 ==
  96. #
  97. #    ★ マップ画像を保存する
  98. #     マップ画面で F7 キーを押してください。
  99. #     右下まで移動すると停止しますが、画像を保存しています。
  100. #     画面が元に戻るまで、しばらくお持ちください。
  101. #     画像は、ゲームフォルダに保存されます。
  102. #
  103. #    ※ キーを変更するには、:F7 で検索してください。
  104. #       1箇所のみ引っかかるので、そこを変更してください。
  105. #
  106. #
  107. #******************************************************************************
  108.  
  109.  
  110. #/////////////////////////////////////////////////////////////////////////////#
  111. #                                                                             #
  112. #                下記のスクリプトを変更する必要はありません。                 #
  113. #                                                                             #
  114. #/////////////////////////////////////////////////////////////////////////////#
  115.  
  116.  
  117. class Sprite_Character < Sprite_Base
  118.   #--------------------------------------------------------------------------
  119.   # ● フレーム更新
  120.   #--------------------------------------------------------------------------
  121.   def update_snap
  122.     self.x = @character.screen_x
  123.     self.y = @character.screen_y
  124.     self.z = @character.screen_z
  125.     self.visible = !@character.transparent
  126.  
  127.     if @balloon_duration > 0
  128.       @balloon_sprite.x = x
  129.       @balloon_sprite.y = y - height
  130.       @balloon_sprite.z = z + 200
  131.     end
  132.   end
  133. end
  134.  
  135. class Spriteset_Map
  136.   #--------------------------------------------------------------------------
  137.   # ●
  138.   #--------------------------------------------------------------------------
  139.   def update_snap
  140.     @tilemap.ox = $game_map.display_x * 32
  141.     @tilemap.oy = $game_map.display_y * 32
  142.  
  143.     @parallax.ox = $game_map.parallax_ox(@parallax.bitmap)
  144.     @parallax.oy = $game_map.parallax_oy(@parallax.bitmap)
  145.  
  146.     @character_sprites.each {|sprite| sprite.update_snap }
  147.  
  148.     airship = $game_map.airship
  149.     @shadow_sprite.x = airship.screen_x
  150.     @shadow_sprite.y = airship.screen_y + airship.altitude
  151.     @shadow_sprite.opacity = airship.altitude * 8
  152.  
  153.     Graphics.update
  154.   end
  155. end
  156.  
  157. class Scene_Map < Scene_Base
  158.   #--------------------------------------------------------------------------
  159.   # ● フレーム更新
  160.   #--------------------------------------------------------------------------
  161.   alias _cao_mapshot_update update
  162.   def update
  163.     _cao_mapshot_update
  164.     map_shop if Input.press?(:F7)
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ●
  168.   #--------------------------------------------------------------------------
  169.   def map_shop
  170.     # プレイヤーを非表示
  171.     last_player_transparent = $game_player.transparent
  172.     $game_player.transparent = true
  173.     # マップの撮影
  174.     bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32)
  175.     screen_width = $game_map.screen_tile_x
  176.     screen_height = $game_map.screen_tile_y
  177.     ($game_map.width / screen_width.to_f).ceil.times do |x|
  178.       ($game_map.height / screen_height.to_f).ceil.times do |y|
  179.         $game_map.set_display_pos(screen_width * x, screen_height * y)
  180.         @spriteset.update_snap
  181.         dx = $game_map.display_x * 32
  182.         dy = $game_map.display_y * 32
  183.         snap = Graphics.snap_to_bitmap
  184.         bitmap.blt(dx, dy, snap, snap.rect)
  185.       end
  186.     end
  187.     # マップ画像の保存
  188.     Graphics.update
  189.     filename = sprintf('ground%03d-1.png', $game_map.map_id,$game_map.display_name)
  190.     bitmap.save_png(filename)
  191.     puts "`#{filename}' 保存完了!"
  192.     # プレイヤーの状態を戻す
  193.     $game_player.transparent = last_player_transparent
  194.     $game_player.center($game_player.x, $game_player.y)
  195.     $game_player.update
  196.   end
  197. end




作者: 946936684    时间: 2012-8-25 12:49
没看懂,不过貌似好厉害的样子
作者: 小路比仔    时间: 2012-8-25 13:17
原来……是截图用的脚本,不过……可以用来干什么呢(我笨……)
作者: 没是的人    时间: 2012-8-25 13:21
好东西啊,不知道楼主有没有xp版的
作者: Luciffer    时间: 2012-8-25 13:22
原来如此,范例的图片是这样截下来的啊。。。
很有用,谢楼主搬运~
作者: 流星的瞬间    时间: 2012-8-25 13:24
fuck 这脚本太好用了 感谢无节操地UP赐予我们神圣的脚本 看来UP是哲♂学♂家
作者: kfflX    时间: 2012-8-25 13:29
很实用的脚本,对地图分享有很大的帮助呢。
作者: poiuy12348609    时间: 2012-8-25 13:50
這樣用Overlay就很方便了


‘‘──poiuy12348609于2012-8-25 13:51补充以下内容:

這樣用Overlay就很方便了
’’
作者: 越前リョーマ    时间: 2012-8-25 14:42
终于有VA版的了,不过要自己隐藏事件略囧,考虑到瀑布之类的吧……
作者: 没是的人    时间: 2012-8-25 18:05
越前リョーマ 发表于 2012-8-25 14:42
终于有VA版的了,不过要自己隐藏事件略囧,考虑到瀑布之类的吧……

大神,我找了一下午没找到xp版的,能赐我个链接吗?
作者: yushuangqi    时间: 2012-9-26 14:46
太厉害了,谢谢楼主分享。之前美化地图的时候手快点断了
作者: zhengxinwu    时间: 2012-9-26 17:58
用图片弄地图的 很实用的说
作者: king    时间: 2012-9-26 19:23
收藏!好脚本!谢谢
作者: poiuy12348609    时间: 2012-9-27 17:23
@kingOverlay是...
我要怎麼說呢?
傳送門
作者: chxush    时间: 2012-9-30 22:53
这个脚本给力
作者: Rain1126    时间: 2012-10-23 20:59
表示编入了Main之后按F7也没反应。。是否需要等候几分钟?
作者: 896409879    时间: 2012-12-29 03:26
再配布は禁止
加工・改変の有無に関わらず、素材の転載・譲渡を目的とした再配布はご遠慮願います。
また、非暗号化プロジェクトでの配布の際は、素材の抜き取りを禁止する旨を明記してください。

禁止转载!!!!!!!!!!!
作者: CIEL蓝    时间: 2013-4-3 20:03
请问有VX的地图导出脚本吗?找了很久了,之前看的几个帖子全是死链。。。。。。。。。。。。
作者: 命真苦    时间: 2013-4-8 15:29
地图100*100的尺寸,按一下F7,画面切换了好几下后,就不知道该怎么办了……怎么办……
作者: 赛露休斯    时间: 2013-7-7 11:41
哇!不错,这样大地图就能截了
作者: 爱夏的鱼    时间: 2013-7-16 14:12
似乎.......很不错???
作者: heixiaomai    时间: 2013-8-13 15:50
好东西啊!!顶一个!
作者: 水野·迪尔    时间: 2013-9-22 23:57
_(:з」∠)_ 这脚本简直神了
作者: 精灵使者    时间: 2013-9-29 22:27
太大的地图用这个脚本会出现cant create bitmap报错。
小地图使用还可以。




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