| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2014-1-19 |
| 在线时间 | 116 小时 |
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 116 小时
- 注册时间
- 2012-8-12
- 回帖
- 58
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 吾不知 于 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/
脚本如下[pre lang="ruby" line="1"]#******************************************************************************
#
# * PNG 保存
#
# --------------------------------------------------------------------------
# バージョン : 1.0.0
# 対 応 : RPGツクールVX Ace : RGSS3
# 制 作 者 : CACAO
# 配 布 元 : http://cacaosoft.web.fc2.com/
# --------------------------------------------------------------------------
# == 概 要 ==
#
# : ピングファイルの出力機能を追加します。
#
# --------------------------------------------------------------------------
# == 使用方法 ==
#
# ★ Bitmap#save_png(filename, alpha = false)
# このビットマップをピングファイルで出力
# filename : 保存するファイル名
# alpha : αチャンネルの有無
#
#
#******************************************************************************
#/////////////////////////////////////////////////////////////////////////////#
# #
# このスクリプトに設定項目はありません。 #
# #
#/////////////////////////////////////////////////////////////////////////////#
class Bitmap
#--------------------------------------------------------------------------
# ● ピング画像として保存
# filename : ファイル名
# alpha : アルファチャンネルの有無
#--------------------------------------------------------------------------
def save_png(filename, alpha = false)
sgnt = "\x89PNG\r\n\x1a\n"
ihdr = _chunk('IHDR', [width,height,8,(alpha ? 6 : 2),0,0,0].pack('N2C5'))
data = []
height.times do |y|
data << 0
width.times do |x|
color = self.get_pixel(x, y)
data << color.red << color.green << color.blue
data << color.alpha if alpha
end
end
idat = _chunk('IDAT', Zlib::Deflate.deflate(data.pack('C*')))
iend = _chunk('IEND', "")
File.open(filename, 'wb') do |file|
file.write(sgnt)
file.write(ihdr)
file.write(idat)
file.write(iend)
end
end
private
#--------------------------------------------------------------------------
# ● チャンクの作成
# name : チャンク名
# data : チャンクデータ
#--------------------------------------------------------------------------
def _chunk(name, data)
return [data.size, name, data, Zlib.crc32(name + data)].pack('NA4A*N')
end
end
#******************************************************************************
#
# * マップ画像の保存
#
# --------------------------------------------------------------------------
# バージョン : 1.0.0
# 対 応 : RPGツクールVX Ace : RGSS3
# 制 作 者 : CACAO
# 配 布 元 : http://cacaosoft.web.fc2.com/
# --------------------------------------------------------------------------
# == 概 要 ==
#
# : マップを1枚の画像にして保存します。
#
# --------------------------------------------------------------------------
# == 注意事項 ==
#
# ※ 画像保存に『PNG 保存』スクリプトが必要になります。
# ※ ゲーム配布時には、削除してください。
# ※ 撮影時にプレイヤーは非表示になります。
#
# --------------------------------------------------------------------------
# == 使用方法 ==
#
# ★ マップ画像を保存する
# マップ画面で F7 キーを押してください。
# 右下まで移動すると停止しますが、画像を保存しています。
# 画面が元に戻るまで、しばらくお持ちください。
# 画像は、ゲームフォルダに保存されます。
#
# ※ キーを変更するには、:F7 で検索してください。
# 1箇所のみ引っかかるので、そこを変更してください。
#
#
#******************************************************************************
#/////////////////////////////////////////////////////////////////////////////#
# #
# 下記のスクリプトを変更する必要はありません。 #
# #
#/////////////////////////////////////////////////////////////////////////////#
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update_snap
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z
self.visible = !@character.transparent
if @balloon_duration > 0
@balloon_sprite.x = x
@balloon_sprite.y = y - height
@balloon_sprite.z = z + 200
end
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def update_snap
@tilemap.ox = $game_map.display_x * 32
@tilemap.oy = $game_map.display_y * 32
@parallax.ox = $game_map.parallax_ox(@parallax.bitmap)
@parallax.oy = $game_map.parallax_oy(@parallax.bitmap)
@character_sprites.each {|sprite| sprite.update_snap }
airship = $game_map.airship
@shadow_sprite.x = airship.screen_x
@shadow_sprite.y = airship.screen_y + airship.altitude
@shadow_sprite.opacity = airship.altitude * 8
Graphics.update
end
end
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias _cao_mapshot_update update
def update
_cao_mapshot_update
map_shop if Input.press?(:F7)
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def map_shop
# プレイヤーを非表示
last_player_transparent = $game_player.transparent
$game_player.transparent = true
# マップの撮影
bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32)
screen_width = $game_map.screen_tile_x
screen_height = $game_map.screen_tile_y
($game_map.width / screen_width.to_f).ceil.times do |x|
($game_map.height / screen_height.to_f).ceil.times do |y|
$game_map.set_display_pos(screen_width * x, screen_height * y)
@spriteset.update_snap
dx = $game_map.display_x * 32
dy = $game_map.display_y * 32
snap = Graphics.snap_to_bitmap
bitmap.blt(dx, dy, snap, snap.rect)
end
end
# マップ画像の保存
Graphics.update
filename = sprintf('ground%03d-1.png', $game_map.map_id,$game_map.display_name)
bitmap.save_png(filename)
puts "`#{filename}' 保存完了!"
# プレイヤーの状態を戻す
$game_player.transparent = last_player_transparent
$game_player.center($game_player.x, $game_player.y)
$game_player.update
end
end
[/pre]
|
评分
-
查看全部评分
|