Project1
标题:
航拍 v 1.1 【地图整体截图并输出为PNG】
[打印本页]
作者:
各种压力的猫君
时间:
2012-1-21 05:37
标题:
航拍 v 1.1 【地图整体截图并输出为PNG】
本帖最后由 各种压力的猫君 于 2012-1-21 19:38 编辑
首先呢,看到了这个帖子:
http://rpg.blue/thread-220151-1-1.html
于是在GOOGLE搜罗给全地图截图的方法,找到了:
http://gameface101.playogame.com/t920-map-screen-shot-rmxp
(外国RM触手真多 = = b 重现了Tilemap这个内部类)
发现这货只能截(其实用“截”并不准确,实际上它是“画”的)到地图元件,截不到事件。
于是本脚本诞生了 - - 可以看做是那个脚本的MOD。
#==============================================================================
# ■ 航拍 v 1.1 by 各种压力的猫君
#------------------------------------------------------------------------------
# 本脚本为 Map Screenshot by mr_wiggles 的汉化&加强,
# 并未取得原作者允许,并未附加原脚本内容,需要原脚本的支持。
# 【换言之本脚本不能单独使用】
#------------------------------------------------------------------------------
# Map Screenshot by mr_wiggles 的发布网址:
# http://gameface101.playogame.com/t920-map-screen-shot-rmxp
#------------------------------------------------------------------------------
# 使用方法:
# ① 将 Map Screenshot by mr_wiggles 插入 MAIN 之上;
# ② 将本脚本插入上面脚本之下,MAIN 之上;
# ③ 运行游戏,在需要截图的地图上按F6。
#------------------------------------------------------------------------------
# 更新记录:
# 2012-01-21 v 1.1 支持行走图的色相、透明度以及合成方式(加减法)
# 2012-01-21 v 1.0 修正行走图传送区域错误
# 2012-01-21 v 0.9 初版
#------------------------------------------------------------------------------
# 更新预告:
# 下一版将加入 设定部分暂未实现的功能
# 下一版将加入 超过Bitmap上限自动分割的功能
#==============================================================================
#==============================================================================
# ■ 设定部分
#------------------------------------------------------------------------------
# 本汉化加强版脚本的设定。
#==============================================================================
# 截图类型
# - 0 仅图块(原脚本类型)
# - 1 图块 + 事件(事件名称以NPC开头的以及主角除外)
# - 2 图块 + 全事件(1的基础上包括NPC和主角)
# - 3 图块 + 远景图 + 雾(暂未实现)
# - 4 图块 + 远景图 + 雾 + 事件(暂未实现)
# - 5 图块 + 远景图 + 雾 + 全事件(暂未实现)
Aerial_Photography_TPYE = 2
#==============================================================================
# ■ 汉化部分
#------------------------------------------------------------------------------
# 对原脚本提示信息的汉化。
#==============================================================================
class Spriteset_Map
def update
bit_to_png_up
if Input.trigger?(Input::F6)
map_infos = load_data("Data/MapInfos.rxdata")
bit = @tilemap.bitmap
exp_time = (bit.height * bit.width) * 0.00000664
string = "航拍图已创建完成\n" +
"像素数: #{bit.height * bit.width} \n" +
"预计输出PNG用时: #{exp_time} 秒\n\n" +
"按确定键开始输出PNG"
print("#{string}")
old_time = Time.now
bit.make_png("#{map_infos[$game_map.map_id].name}")
string = "#{map_infos[$game_map.map_id].name}.png 已被创建 \n" +
"尺寸:宽 #{bit.width}, 高 #{bit.height} \n" +
"耗时:#{Time.now - old_time} 秒"
print("#{string}")
end
end
end
#==============================================================================
# ■ 加强部分
#------------------------------------------------------------------------------
# 对原脚本功能的加强。
#==============================================================================
class Game_Event < Game_Character
def name
return @event.name
end
end
class Sprite_Character < RPG::Sprite
attr_reader :tile_id # 元件 ID (0 为无效)
end
class Tilemap
#--------------------------------------------------------------------------
# * Collect Bitmap
#--------------------------------------------------------------------------
def bitmap
# Creates New Blank Bitmap
bitmap = Bitmap.new(@layers[0].bitmap.width, @layers[0].bitmap.height)
# Passes Through All Layers
for layer in @layers
bitmap.blt(0, 0, layer.bitmap,
Rect.new(0, 0, bitmap.width, bitmap.height))
end
#--------------------------------------------------------------------------
# 绘制事件行走图
#--------------------------------------------------------------------------
if Aerial_Photography_TPYE == 1 or
Aerial_Photography_TPYE == 2 or
Aerial_Photography_TPYE == 4 or
Aerial_Photography_TPYE == 5
# 生成角色活动块
character_sprites = []
for i in $game_map.events.keys.sort
# 排除NPC
if Aerial_Photography_TPYE == 1 or
Aerial_Photography_TPYE == 4
next if $game_map.events[i].name.slice(/^NPC/)
end
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
character_sprites.push(sprite)
end
# 排除主角
unless Aerial_Photography_TPYE == 1 or
Aerial_Photography_TPYE == 4
character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
end
# 绘制
for npc4map in character_sprites
rx = npc4map.x + $game_map.display_x / 4 - npc4map.ox
ry = npc4map.y + $game_map.display_y / 4 - npc4map.oy
o = npc4map.opacity
r = npc4map.src_rect
# 合成方式的处理
if npc4map.blend_type == 0
b = npc4map.bitmap.clone
else
# 将行走图切一块过来
sb = Bitmap.new(r.width, r.height)
sb.blt(0, 0, npc4map.bitmap, r, o)
# 同样地,将底部图片切一块过来
ub = Bitmap.new(r.width, r.height)
sr = Rect.new(rx, ry, r.width, r.height)
ub.stretch_blt(ub.rect, bitmap, sr)
# 获取颜色值
ubc = []
sbc = []
bc = []
for y in 0..(ub.height - 1)
for x in 0..(ub.width - 1)
ubc.push ub.get_pixel(x, y)
sbc.push sb.get_pixel(x, y)
end
end
@tc = Color.new(0, 0, 0)
# 生成bitmap
b = Bitmap.new(r.width, r.height)
for y in 0..(b.height - 1)
for x in 0..(b.width - 1)
i = x + y * b.width
uc = ubc[i]
sc = sbc[i]
mc = mix_color(uc, sc, npc4map.blend_type)
b.set_pixel(x, y, mc)
end
end
r = Rect.new(0, 0, r.width, r.height)
end
# 若不是地图原件,采用行走图绘制方式
if npc4map.tile_id == 0
bitmap.blt(rx, ry, b, r, o)
else
bitmap.blt(rx, ry, b, Rect.new(0, 0, 32, 32), o)
end
end
end
#--------------------------------------------------------------------------
# Return Bitmap
return bitmap
end
#--------------------------------------------------------------------------
def mix_color(c1, c2, bt)
return c1 if c2.alpha == 0
case bt
when 1 # 加法
tc_r = c1.red + c2.red
tc_g = c1.green + c2.green
tc_b = c1.blue + c2.blue
tc_a = c1.alpha + c2.alpha
when 2 # 减法
tc_r = (c1.red - c2.red).abs
tc_g = (c1.green - c2.green).abs
tc_b = (c1.blue - c2.blue).abs
tc_a = [c1.alpha, c2.alpha].max
end
mc = [tc_r, tc_g, tc_b, tc_a]
@tc.set(mc[0], mc[1], mc[2], mc[3])
return @tc
end
#--------------------------------------------------------------------------
end
复制代码
矿山小镇 外观.png
(377.39 KB, 下载次数: 42)
下载附件
保存到相册
2012-1-21 19:37 上传
地图大赛的时候这个脚本会很好用吧……
更新1.1:支持色相、透明度、以及加法/减法混合
(我到底在干嘛 = = b 预告的一个都没更……上次写着暂无支持计划的反而全支持了……)
作者:
七夕小雨
时间:
2012-1-21 05:48
其实雾行图和远景猫君都可以很容易搞定的吧,期待更新
作者:
zeldafd
时间:
2012-1-21 07:55
即是对地图整体截图,而且可以任意繪画,修改再變回地图?如是的,大神也!
作者:
guaneva
时间:
2012-1-21 10:00
哇!一堆英文叫我如何是好?不过截不到事件确实不错,谢谢猫君的脚本。
作者:
zeldafd
时间:
2012-1-21 11:13
截完後...圖在那?!!!!!?
作者:
各种压力的猫君
时间:
2012-1-21 19:43
本帖最后由 各种压力的猫君 于 2012-1-21 19:47 编辑
更新 v 1.1 了,自顶一下。
忽然想到一个邪恶用途:
①用RMXP绘制三图层式的地图
②分别每图层输出PNG(考虑加入分图层输出功能~)
③扔到ACE当远景图并用图片显示遮挡层
哇咔咔ACE的脑残地图绘制方式去屎吧!
作者:
serena718
时间:
2012-1-21 19:57
噗…那個Screen Shot我之前才在地圖區發過XDD
不過他不能後台就是了,不知道這個可不可以@@
作者:
yangff
时间:
2012-1-21 20:07
本帖最后由 yangff 于 2012-1-21 20:09 编辑
我写过。lz等等
http://rpg.blue/forum.php?mod=viewthread&tid=100487
就是这个
作者:
guxiyili
时间:
2019-10-10 10:18
这个mv可以用的嘛
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1